请高手帮我找出这个求完数的错误:#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;}}
2 回答
qq_笑_17
TA贡献1818条经验 获得超7个赞
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;
}
}
HUX布斯
TA贡献1876条经验 获得超6个赞
是这样的……
所谓“完数”是指它的所有小于它本身的因子之和(即不包括本身)等于它本身的数。如:
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;
}
}
希望对你有所帮助……
- 2 回答
- 0 关注
- 1113 浏览
添加回答
举报
0/150
提交
取消