正整數n的所有小於n的不同正因數之和若等於n本身,稱數n為完全數。
例如,6的正因數為1,2,3,而6=1=2+3,則6是壹個完全數。
試求指定區域內的完全數。
1、算法分析
對指定區域中的每壹個數A實施窮舉判別。根據完全數的定義,為了判別正數A是不是完全數,用試商法找出A的所有小於A的因數K。顯然,1<=K<=A/2。註意到1是任何整數的因數,先把因數1確定下來,即因數和S賦初值1,然後設置K從2到A/2的循環,由表達式A/K判別K是否是A的因數,並求出A的因數累加和S。最後若滿足條件A=S說明A是完全數,作打印輸出。把n的因數從1開始,由小到大排列,寫成和式。
程序代碼如下:
#include
void main()
{
int a,s,k;
int n=0;
printf("(2,10000)中的完全數: ");
for(a=2;a<=10000;a++)
{
s=1;
for(k=2;k<=a/2;k++)
if((float)a/k==a/k) s=s+k;
if(s!=a)goto A;
n=n+1;
printf("%d:%d=1",n,a);
for(k=2;k<=a/2;k++)
if((float)a/k==a/k)printf("+ %d",k);
printf("\n");
A:;
}
}