507. 完美数
对于一个 正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为“完美数”。
给定一个 正整数
n
, 如果他是完美数,返回True
,否则返回False
示例:
输入: 28 输出: True 解释: 28 = 1 + 2 + 4 + 7 + 14
注意:
输入的数字
n
不会超过 100,000,000. (1e8)
解法一
//时间复杂度O(sqrt(n)), 空间复杂度O(1)
class Solution {
public:
bool checkPerfectNumber(int num) {
if(num <= 1) return false;
int sum = 0;
int factor = sqrt(num);
while(factor > 0) {
if(num % factor == 0) sum += (factor + num / factor);
factor--;
}
return num == sum / 2;
}
};
本题与之前求因数的思路类似,只不过多了个累加的过程。从sqrt(num)开始(而不是从num - 1开始)是为了尽量节省计算量。
2019/05/25 22:14