本文目錄一覽:
用C語言求給定區間內的完數個數…
源程序如下:
#include
stdio.h
void
printperfect(int
number);
int
isperfect
(int
);
int
main()
{
int
a,b,count=0;
scanf(“%d%d”,a,b);
int
x=ab?a:b;
int
y=ab?a:b;
for
(;x=y;x++)
{
if
(isperfect(x))
{
printperfect(x);
count=count+1;
}
}
printf(“區間%d~%d完數個數為%d\n”,a,b,count);
return
0;
}
int
isperfect(int
number)
{
int
sum=0;
for
(int
i=1;inumber;i++)
if
(number%i==0)
sum+=i;
return
sum==number;
}
void
printperfect(int
number)
{
printf(“%d=1”,number);
for
(int
i=2;inumber;i++)
if
(number%i==0)
printf(“+%d”,i);
printf(“\n”);;
}
VC++6.0測試如下:
C語言如何判斷這個數是完數?
1、打開c語言編輯器,新建一個C語言空白文件:
2、然後就可以開始編寫代碼了,這裡完數的意思就是一個數等於它的因子之和,比如6的因子為1、2、3,而6剛好是這些數之和。根據完數的定義,程序要輸入一個數的範圍,接著計算出所選取的整數i的因子,將各因子累加到變數s ,若s等於i,則可確認i為完數:
3、最後運行查詢,輸入一個範圍,程序就會自動查找這個範圍內的數字里有那些完數,計算完成後會將其結果列印出來:
C語言判斷區間內完數的個數?
你的程序沒有錯誤,超時的問題主要是因為你的找完數的演算法有問題,其中有大量的計算是無用的。比如6是一個完數,按照你的演算法是用6除以1至5來找出所有因子,這樣你就用了5次計算,實際有用的計算到3就可以了,這樣就少了2次計算,節省了時間。對於越大的完數,無用的計算就越多。找完數演算法可以這樣優化:一個數的所有因子中最大的因子必定小於等於該數的一半(除了其本身以外),所以可以把 for(j=1; ji; j++) 中的條件改為 for(j=1; j=(int)(i/2); j++) ,這樣的話,計算次數就減少了至少一半,所花費的時間也就少了。
c語言10000以內完數的個數
完數,即完美數,一個數如果恰好等於除它本身外的因子之和,這個數就稱為完數。
1000以內所有完數
C語言代碼:
#include stdio.h
/**CopyRight@fantasy0707*/
#define N 1000 //完數求解範圍
main()
{
int i,j,sum; //sum用來存放因子之和
for(i=1;iN;i++) //對1到1000以內的數依次嘗試
{
sum=0; //給sum賦值,同時也是對上一次的值清空
for(j=1;j=i/2;j++) //查找因子
{
if(i%j==0) // 如果是因子
{
sum+=j; //把當前的因子累加到sum中
}
}
if(sum==i) //判斷是不是完數,即因子之和等於自身
{
printf(“%-5d its factors are: “,i); //是完數,輸出
for(j=1;j=i/2;j++) //再次找出這個完數的因子
{
if(i%j==0) //輸出各個因子
printf(“%d,”,j);
}
printf(“\n”);
}
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/154344.html