题解 | 完全数计算
解题思路:
- 核心是找到其公因子
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int total = 0;
for (int i = 1; i <= n; i++) {
if (isPerfectNum(i)) {
total++;
}
}
System.out.println(total);
}
public static boolean isPerfectNum(int num) {
Set<Integer> set = new HashSet<>();
set.add(1);
if (num % 2 == 0) {
set.add(num / 2);
set.add(2);
for (int i = 3; i < num / 2; i++) {
if (num % i == 0 && !set.contains(i)) {
set.add(i);
set.add(num / i);
}
}
} else if (num % 3 == 0) {
set.add(num / 3);
set.add(3);
for (int i = 4; i < num / 3; i++) {
if (num % i == 0 && !set.contains(i)) {
set.add(i);
set.add(num / i);
}
}
} else {
for (int i = 5; i < num / 5; i++) {
if (num % i == 0 && !set.contains(i)) {
set.add(i);
set.add(num / i);
}
}
}
set.remove(num);
return num == set.stream().mapToInt(Integer::intValue).sum();
}
}

查看3道真题和解析
