C语言描述——寻找完数
题目
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数。
程序分析
对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
程序源代码
int main(void){static int k[10];int i, j, n, s;for (j = 2; j < 1000; j++){n = -1;s = j;for (i = 1; i < j; i++){if ((j % i) == 0){n++;s = s - i;k[n] = i;}}if (s == 0){printf("%d is a perfect number ", j);for (i = 0; i < n; i++)printf("%d,", k[i]);printf("%d\n", k[n]);}}return 0;}
运行结果
6 is a perfect number 1,2,328 is a perfect number 1,2,4,7,14496 is a perfect number 1,2,4,8,16,31,62,124,248
