問題描述
編算法找出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"); } } }