問題:一個數如果恰好等于他的因子之和,這個數就稱為“完數”,例如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");
? ? ? ? }
? ? }
}
結果: