如果i是num的一个因数,那么num/i也一定是它的因数,这里令i<=num/i,即i*i<=num
还是没有想明白为什么英雄哥的没有等号,求大佬指教
下面是个人理解的有等号的法子
bool checkPerfectNumber(int num){
int sum=0;
for(int i=1;i*i<=num;++i){
if(num%i==0){
sum+=i;
if(i*i!=num) sum+=num/i;
}
}
sum-=num;
return sum==num;
}
方法一:这题比之前的丑数2简单多了,只要把给的n去掉全部的2,3,5因子就好了
bool isUgly(int n){
if(n==0) return false;
while(n%2==0) n/=2;
while(n%3==0) n/=3;
while(n%5==0) n/=5;
return n==1;
}
方法二:递归 ,差别不大
bool isUgly(int n){
if(n<=1) return n==1;
if(n%2==0) return isUgly(n/2);
else if(n%3==0) return isUgly(n/3);
else if(n%5==0) return isUgly(n/5);
return 0;
}