507. 完美数

题目

对于一个 正整数,如果它和除了它自身以外的所有 正因子 之和相等,我们称它为 「完美数」

给定一个 整数 n, 如果是完美数,返回 true;否则返回 false

示例1:

1
2
3
4
输入:num = 28
输出:true
解释:28 = 1 + 2 + 4 + 7 + 14
1, 2, 4, 7, 和 1428 的所有正因子。

示例2:

1
2
输入:num = 7
输出:false

提示:

  • 1 <= num <= 10^8

解法

解法一:

打表

Java

1
2
3
4
5
6
7
8
9
10
11
public boolean checkPerfectNumber(int num) {
switch(num) {
case 6:
case 28:
case 496:
case 8128:
case 33550336:
return true;
}
return false;
}

解法二:

暴力

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public boolean checkPerfectNumber(int num) {
if (num == 1) {
return false;
}

int bound = (int) Math.sqrt(num);
int sum = 1;
for (int i = 2;i <= bound;i++) {
if (num % i == 0) {
sum += i;
int temp = num / i;
if (temp != i) {
sum += temp;
}
if (sum > num) {
return false;
}
}
}
return sum == num;
}
0%