完數:等於其真因數(不含自身)之和。如 6=1+2+3。本例找出 1000 以內所有完數並打印分解式。
// Created by www.runoob.com on 15/11/9.
// Copyright © 2015年 菜鳥教程. All rights reserved.
//
#include <stdio.h>
#define N 1000
int main() {
int i, j, k, n, sum;
int a[256];
for (i = 2; i <= N; i++) {
sum = a[0] = 1;
k = 0;
for (j = 2; j <= i/2; j++)
if (i % j == 0) {
sum += j;
a[++k] = j;
}
if (i == sum) {
printf("%d=%d", i, a[0]);
for (n = 1; n <= k; n++) printf("+%d", a[n]);
printf("\n");
}
}
return 0;
}
6=1+2+3
28=1+2+4+7+14
496=1+2+4+8+16+31+62+124+248
已知完數對應梅森素數:2^(p-1)*(2^p-1),p 為使 2^p-1 為素數的指數。1000 以內僅有這三個。