C++求完数

来源:百度知道 编辑:UC知道 时间:2024/05/26 13:04:59
请高手帮我找出这个求完数的错误:
#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;
}
}

是这样的……

所谓“完数”是指它的所有小于它本身的因子之和(即不包括本身)等于它本身的数。如:
6是一个完数:6=1+2+3。

要知道1不是完数,而你的程序定义的m是从1开始求,当然会出错咯,还有就是第二个循环i不应该等于m,应该小于m。

还有一点就是,这样的程序效率不高,因为只要比到一半就行了……

下面是我帮你改的程序……

#include<iostream.h>

void main(){
int m;
for(m=2;m<=1000;m++)//这里从2开始,因为不考虑1
{
int k=0;
for(int i=1;i<=m/2;i++)//这里只要比到一半就行了,没必要比到m,因为大于m/2的数不可能被m整除……
{
if((m%i)==0)
k=k+i;
}
if(k==m)
cout<<" "<<m<<endl;
}
}

希望对你有所帮助……

for(int i=1;i<=m;i++)是错的,完美数是真因数之和,比如6=1+2+3,6本身是不算6的真因数的。

#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;
}
}

天,啥叫完数啊<