求1000以內的所有完數

問題:一個數如果恰好等于他的因子之和,這個數就稱為“完數”,例如6=1+2+3,編程找出1000以內的所有完數

分析:

因子,就是兩個整數相乘,能夠得出這個數,因為題目要求沒有他本身,所以只要從1循環到這個數的一半,進行尋找因子,例如6=3*2,6=1*6,所以1,2,3,6就是6的因子,但是題目中沒有6,所以也就循環一半就可以了。

代碼:

main(){

? ??int n,k[10];

? ? //scanf("%d",&n);

? ? //輸出因子

? ? int j,i;

? ? for(j=2;j<1000;j++){

? ? ? ? //printf("%d? ",j);

? ? ? ? int sum=0,m=0;

? ? ? ? for(i=1;i<=j/2;i++){

? ? ? ? ? ? if(j%i==0){

? ? ? ? ? ? ? ? //i就是因子

? ? ? ? ? ? ? ? sum+=i;

? ? ? ? ? ? ? ? k[m]=i;

? ? ? ? ? ? ? ? m++;

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? if(sum==j){

? ? ? ? ? ? printf("%d=",j);

? ? ? ? ? ? for(i=0;i<m;i++){

? ? ? ? ? ? ? ? if(i==m-1){

? ? ? ? ? ? ? ? ? ? printf("%d",k[i]);

? ? ? ? ? ? ? ? }else{

? ? ? ? ? ? ? ? ? ? printf("%d+",k[i]);

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? ? ? printf("\n");

? ? ? ? }

? ? }

}

結果:


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。