完全數 = 所有真因子(不含自身)之和等於自身。如 6=1+2+3, 28=1+2+4+7+14。
#include
int main() {
int n, N, i, j, sum;
// 1. 判斷單個數
printf("輸入整數 n,判斷是否完全數:\n");
scanf("%d", &n);
sum = 0;
for (i = 1; i < n; i++) if (n % i == 0) sum += i;
if (sum == n) printf("%d 是完全數\n", n); else printf("%d 不是完全數\n", n);
// 2. 輸出 1~N 所有完全數
printf("輸入整數 N,輸出 1~%d 所有完全數:\n", N);
scanf("%d", &N);
printf("完全數列表:\n");
for (i = 2; i <= N; i++) { // 從 2 開始,1 無真因子
sum = 0;
for (j = 1; j < i; j++) if (i % j == 0) sum += j;
if (sum == i) printf("%d\n", i);
}
return 0;
}
sqrt(i),成對累加,複雜度從 O(N²) 降為 O(N√N)。