目录
完美数
描述
对于一个 正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」。
给定一个 整数 n, 如果是完美数,返回 true,否则返回 false
示例 1
输入:num = 28 输出:true 解释:28 = 1 + 2 + 4 + 7 + 14 1, 2, 4, 7, 和 14 是 28 的所有正因子
示例 2
输入:num = 6 输出:true
示例 3
输入:num = 496 输出:true
示例 4
输入:num = 8128 输出:true
示例 5
输入:num = 2 输出:false
提示
方法:枚举
我们可以枚举 num 的所有真因子,累加所有真因子之和,记作 sum。若 sum=num 则返回 true,否则返回 false。
在枚举时,我们只需要枚举不超过 的数。这是因为如果 num 有一个大于 的因数 d,那么它一定有一个小于 的因数 。
在枚举时,若找到了一个因数 d,那么就找到了因数 。注意当 d⋅d=num 时这两个因数相同,此时不能重复计算。
class Solution {
public boolean checkPerfectNumber(int num) {
if (num == 1) {
return false;
}
int sum = 1;
for (int d = 2; d * d <= num; ++d) {
if (num % d == 0) {
sum += d;
if (d * d < num) {
sum += num / d;
}
}
}
return sum == num;
}
}