问题描述:一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6=1+2+3,如8的因子和是7(即1+2+4),8不是完数。编程找出1000以内的所有完数。
问题分析:首先从2到1000构造循环控制变量i的外层循环。每次循环中,利用内嵌的循环逐个地求出i的因子,并累加起来(为提高效率,可能考虑因子的对称性,即j为小于sqrt(i)的因子,则一定有i/j也是因子),若累加和与i相等,则i是完全数,输出。然后继续循环,考察i+1……
#include<iostream.h>
int main()
{
int a,i,sum;
for(a=2;a<=1000;a++)
{
sum=0;
for(i=1;i<a;i++)
{
if(a%i==0)
sum=sum+i;
}
if(sum==a)
cout<<a<<endl;
}
}