2 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊
for(int i=1;i<=m;i++)是錯(cuò)的,完美數(shù)是真因數(shù)之和,比如6=1+2+3,6本身是不算6的真因數(shù)的。
#include<iostream.h>
void main()
{
int m;
for(m=1;m<=1000;m++)
{
int k=0;
for(int i=1;i<m;i++)//這里修改了
{
if((m%i)==0)
k=k+i;
}
if(k==m)
cout<<" "<<m<<endl;
}
}

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個(gè)贊
是這樣的……
所謂“完數(shù)”是指它的所有小于它本身的因子之和(即不包括本身)等于它本身的數(shù)。如:
6是一個(gè)完數(shù):6=1+2+3。
要知道1不是完數(shù),而你的程序定義的m是從1開(kāi)始求,當(dāng)然會(huì)出錯(cuò)咯,還有就是第二個(gè)循環(huán)i不應(yīng)該等于m,應(yīng)該小于m。
還有一點(diǎn)就是,這樣的程序效率不高,因?yàn)橹灰鹊揭话刖托辛恕?br/>
下面是我?guī)湍愀牡某绦颉?br/>
#include<iostream.h>
void main(){
int m;
for(m=2;m<=1000;m++)//這里從2開(kāi)始,因?yàn)椴豢紤]1
{
int k=0;
for(int i=1;i<=m/2;i++)//這里只要比到一半就行了,沒(méi)必要比到m,因?yàn)榇笥趍/2的數(shù)不可能被m整除……
{
if((m%i)==0)
k=k+i;
}
if(k==m)
cout<<" "<<m<<endl;
}
}
希望對(duì)你有所幫助……
- 2 回答
- 0 關(guān)注
- 1168 瀏覽
添加回答
舉報(bào)