问题及代码:
/*
*Copyright (c)2014,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:num.cpp
*作 者:单昕昕
*完成日期:2014年12月12日
*版 本 号:v1.0
*
*问题描述:任何一个自然数的约数中都有1和它本身,我们把小于它本身的因数叫做这个自然数的真约数。 如6的所有真约数是1、2、3,而且6=1+2+3。像这样,一个数所有真约数的和正好等于这个数,通常把这个数叫做完美数。 古希腊人非常重视完美数。毕达哥拉斯发现它之后,人们就开始了对完美数的研究。 现在要求输出所有在m和n范围内的完美数。
*程序输入:输入数据有多组,每组占一行,包括两个整数m和n(1≤m≤n≤99999999)。 输入以0 0结束。
*程序输出:对于每个测试实例,要求输出所有在给定范围内的完美数,就是说,输出的完美数必须大于等于m并且小于等于n,如果有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开; 如果给定的范围内不存在完美数,则输出No; 每个测试实例的输出占一行。
*/
#include <iostream>
using namespace std;
int main()
{
int i,k,sum,m,n;
while(cin>>m>>n&&m!=0&&n!=0)
{
if(1<=m&&m<=99999999&&1<=n&&n<=99999999)
{
for(i=2; i<=n&&i>=m; i++)
{
sum=1;
for(k=2; k<=i/2; k++)
if(i%k==0)
sum+=k;
if(sum==i)
cout<<sum<<" ";
}
}
}
return 0;
}运行结果:
知识点总结:
完美数。
学习心得:
效率低啊啊啊啊啊。
超时了啊啊啊啊啊。
求大神指点迷津啊。
762

被折叠的 条评论
为什么被折叠?



