题解 | 完全数计算
解题思路:
- 核心是找到其公因子
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(); } }