问题描述
编算法找出1000以内所有完数。
完数:其因数(因数不含自身)之和=自身的数。
例如:28的因子为1、2、4、7,14,而28=1+2+4+7+14。因此28是“完数”。编算法找出1000之内的所有完数,并按下面格式输出其因子:28 it’s factors are 1,2,4,7,14。
问题分析
1、这里不要质因数。
2、每个因数只记一次,如8的因数为1,2,4。
算法设计
1>顶层算法
for(i=2;i<n;i++) { 判断i是否是“完数”; 如果是“完数”,则按格式输出;}
2>判断i是否是完数
s=1 for(j=2;j<i;j=j+1) if (i mod j=0) s=s+j; /*j是i的因数*/ If (s=i) //i是“完数”;
完整代码如下:
#include<stdio.h> int main(){ int n,i,sum; for(n=1;n<1000;n++){ sum=0; for(i=1;i<n;i++){ if(n%i==0){ sum+=i; } } if(sum==n){ printf("%d的因数为",sum); for(i=1;i<n;i++){ if(n%i==0){ printf("%d,",i); } } printf("\n"); } } }