题目描述:
对于一个 正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为“完美数”。
给定一个 正整数 n, 如果他是完美数,返回 True,否则返回 False
示例:
输入: 28
输出: True
解释: 28 = 1 + 2 + 4 + 7 + 14
注意:
输入的数字 n 不会超过 100,000,000. (1e8)
题目分析:易知一个数n一半的因子都在 [1,sqrt(n)]区间当中。
class Solution {
public:
bool checkPerfectNumber(int num) { //num一半的因子都在1~sqrt(num)中
if(num==1){
return false; //因为满足条件的因子不能包含自身,因此要对1进行特判
}
int ans=1; //ans从1开始
for(int i=2;i<=sqrt(num);i++){
if(num%i==0){
ans+=i+num/i; //将所有因子进行相加
}
}
return ans==num; //如果最后ans==num,那么返回true
}
};