完全數又稱完美數,指該數等於其所有真因數(不含自身)之和。例如 6 = 1+2+3,28 = 1+2+4+7+14。本文提供兩種 Java 實作並分析效能。
public class PerfectNumberBruteForce {
public static void main(String[] args) {
System.out.print("1000 以內的完全數:");
for (int i = 2; i <= 1000; i++) {
int sum = 0;
for (int j = 1; j < i; j++) {
if (i % j == 0) sum += j;
}
if (sum == i) System.out.print(i + " ");
}
System.out.println();
}
}
public class PerfectNumberOptimized {
public static void main(String[] args) {
for (int i = 2; i <= 1000; i++) {
int sum = 1; // 1 是所有數的因數
for (int j = 2; j * j <= i; j++) {
if (i % j == 0) {
sum += j;
int pair = i / j;
if (pair != j) sum += pair; // 避免平方數重複加
}
}
if (sum == i) System.out.println(i + " 是完全數");
}
}
}
6, 28, 496
2^(p-1) * (2^p - 1),其中 2^p - 1 為質數。| 方法 | 時間複雜度 | 1000 以內耗時 |
|---|---|---|
| 暴力雙層迴圈 | O(n²) | ~2ms |
| 優化至 √n | O(n√n) | ~0.3ms |