问题描述:
We define the Perfect Number is a positive integer that is equal to the sum of all its positive divisors except itself.
Now, given an integer n, write a function that returns true when it is a perfect number and false when it is not.示例:
Input: 28 Output: True Explanation: 28 = 1 + 2 + 4 + 7 + 14Note: The input number n will not exceed 100,000,000. (1e8)
问题分析:
我们考虑用循环遍历的方法求解,尽量减少循环次数,过程详见代码:
class Solution {
public:
bool checkPerfectNumber(int num) {
int low = sqrt(num);
int high;
int res = 0;
while(low > 0)
{
high = num / low;
if(low * high == num)
{
res = (high == num) ? res + low : res + low + high;
}
low--;
}
return res == num && num != 1 && num != 0;
}
};