本題要求實現一個計算整數因子和的簡單函數,并利用其實現另一個函數,輸出兩正整數m和n(0<m≤n≤10000)之間的所有完數。所謂完數就是該數恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3為6的因子。
函數接口定義:
int factorsum( int number );
void PrintPN( int m, int n );
其中函數factorsum須返回int number的因子和;函數PrintPN要逐行輸出給定范圍[m, n]內每個完數的因子累加形式的分解式,每個完數占一行,格式為“完數 = 因子1 + 因子2 + … + 因子k”,其中完數和因子均按遞增順序給出。如果給定區間內沒有完數,則輸出一行“No perfect number”。
我的代碼:
int factorsum( int number )
{int sum = 0,n = number,i;for(i = 1;i<n;i++)//在此剔除因數iif(n%i == 0)sum +=i;return sum;
}
void PrintPN( int m, int n )
{int i,p = 0;//p作為是否有完數的標志for(i = m;i<=n;i++){if(i == factorsum(i)){int j = 2;printf("%d = 1",i);//完數一定有因數"1"for(j = 2;j<i;j++){if(i%j == 0)printf(" + %d",j);//輸出等式}printf("\n");//空行p = 1;}}if(p == 0)printf("No perfect number");
}