题解《算法零基础100讲》(第9讲) 算术基本定理(java版)
Posted 敲代码的xiaolang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解《算法零基础100讲》(第9讲) 算术基本定理(java版)相关的知识,希望对你有一定的参考价值。
😁算法小白欢迎加入此社区:https://bbs.csdn.net/forums/hero?category=0
由英雄大佬带领的抱团学算法队伍,从0开始,期待你的加入🥳
本博文是对此文章习题所作的题解,如有不足,请多指教:https://blog.csdn.net/WhereIsHeroFrom/article/details/120875289
先对英雄的讲解文章里的代码进行记录整理
bool checkPerfectNumber(int num){
int i, sum = 0;
if(num == 1) {
return false;
}
for(i = 1; i*i <= num; ++i) {
if(num % i == 0) {
sum += i;
if(i*i != num)
sum += num / i;
}
}
sum -= num;
return sum == num;
}
/*代码转载自:https://blog.csdn.net/WhereIsHeroFrom/article/details/120875289*/
先对1的时候特殊处理一下,然后你求一个数的正因子,不可能存在两个正因子同时比这个数开根号还大,所以我们的判断条件就是 i*i<=num; 然后后面的if语句是说如果能整除,那么我们再把另一个质因子求出来,你比如28的正因子有个2,那么就该有个14,但是14比根号下28要大,所以我们要用sum+=num / i 来求出另一个正因子。
今日题解:
第一题:https://leetcode-cn.com/problems/perfect-number/
跟上面的思路一模一样,直接出击!
class Solution {
public boolean checkPerfectNumber(int num) {
int i, sum = 0;
if(num == 1) {
return false;
}
for(i = 1; i*i <= num; ++i) {
if(num % i == 0) {
sum += i;
if(i*i != num)
sum += num / i;
}
}
sum -= num;
return sum == num;
}
}
第二题:https://leetcode-cn.com/problems/ugly-number/
关于丑数的详解参考笔者此篇博文:https://blog.csdn.net/weixin_52605156/article/details/121023872?spm=1001.2014.3001.5501
这里处理起来相对简单一些,因为我知道不管怎么样,你的丑数一定是通过2、3、5之间相乘得到的,所以我们就可以使用一个循环,不断的对你输入的这个数进行取余和对其整除,直到为1,那它就是一个丑数。
class Solution {
public boolean isUgly(int num) {
if(num==0){
return false;
}
while(true){
if(num%2==0){
num = num/2;
}
else if(num%3==0){
num = num/3;
}
else if(num%5==0){
num = num/5;
}
else{
break;
}
}
if(num == 1){
return true;
}
else{
return false;
}
}
}
有问题欢迎留言,欢迎加入“万人千题”社区,在这里一起努力。
以上是关于题解《算法零基础100讲》(第9讲) 算术基本定理(java版)的主要内容,如果未能解决你的问题,请参考以下文章
题解《算法零基础100讲》(第6讲) 日期算法(java版)
题解《算法零基础100讲》(第16讲) 变量交换算法(java版)
题解《算法零基础100讲》(第7讲---丑数) (java版)