题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如6=1+2+3.
编程找出1000以内的所有完数。
1.程序分析:
求因数:
对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
通过得到的因数求和再与n做对比即可。
2.程序源代码:
#include <stdio.h>
#include <conio.h>
main()
{
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 wanshu",j);
for(i=0;i<n;i++)
printf("%d,",k);
printf("%d\n",k[n]);
}
}
getch();
}
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!