对于一个 正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为“完美数”。
给定一个 正整数 n, 如果他是完美数,返回 True,否则返回 False
示例:
输入: 28
输出: True
解释: 28 = 1 + 2 + 4 + 7 + 14
注意:
输入的数字 n 不会超过 100,000,000. (1e8)
思路很简单,除了本身和其余,注意的是1应该返回false,并且循环范围可以缩小点
class Solution {
public boolean checkPerfectNumber(int num) {
if(num == 1 || num == 0){
return false;
}
if(num == 2 || num == 3 || num == 4){
return false;
}
int tem = num * 2;
for (int i = 1; i * i < num ; i++) {
if(num % i == 0){
int j = num / i;
tem = tem - j - i;
if(tem < 0 ){
break;
}
}
}
if(tem == 0){
return true;
}else {
return false;
}
}
}
效率还挺高的
排行靠前的代码
class Solution {
public boolean checkPerfectNumber(int num) {
return num==6||num==28||num==496||num==8128||num==33550336;
}
}
其实这个代码利用的是
这样就可以直接判断是不是了,给出了一个优化的思路,哈哈哈哈
1e8以内只有5个完美数