对于一个正整数,如果它和除了它自身以外的所有正因子之和相等,我们称它为「完美数」。
给定一个整数 n, 如果是完美数,返回 true;否则返回 false。
示例 1:
输入:num = 28
输出:true
解释:28 = 1 + 2 + 4 + 7 + 14
1, 2, 4, 7, 和 14 是 28 的所有正因子。
示例 2:
输入:num = 7
输出:false
提示:
1 <= num <= 108
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/perfect-number
(1)暴力穷举法
暴力穷举法比较容易想到,即枚举出正整数 num 所有的正因子,然后判断它们的和是否等于 num 即可。
(2)数学
思路参考本题官方题解。
//思路1————暴力穷举法
class Solution {
public boolean checkPerfectNumber(int num) {
int copyNum = num;
for (int i = 1; i <= num / 2; i++) {
if (num % i == 0) {
copyNum -= i;
}
}
return copyNum == 0;
}
}
//思路2————数学
class Solution {
public boolean checkPerfectNumber(int num) {
return num == 6 || num == 28 || num == 496 || num == 8128 || num == 33550336;
}
}