C++求完数

请高手帮我找出这个求完数的错误:
#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;
}
}

慕婉清6462132
浏览 1114回答 2
2回答

qq_笑_17

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布斯

是这样的……所谓“完数”是指它的所有小于它本身的因子之和(即不包括本身)等于它本身的数。如: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;}}希望对你有所帮助……
打开App,查看更多内容
随时随地看视频慕课网APP