列出完数
题目描述
请从1到某个自然数的范围中打印出所有的完数来。
在自然数中,完数寥若晨星。所谓“完数”是指一个数恰好等于它的所有不同因子之和(不包括它自身)。例如,6是完数,因为6=1+2+3.而24不是完数,因为24不等于1+2+3+4+6+8+12=36.
输入描述
输入数据中含有一些整数n(1<n<10000)
输出描述
对于每个整数n,输出所有不大于n的完数。每个整数n的输出由n引导,跟上冒号,然后是由空格开道的一个个完数,每个n的完数列表应占单独一行。
样本输入
100
5000
样本输出
100: 6 28
5000: 6 28 496
分析:题目还是比较水,找出因子数求和比较就可以,直接上代码!
#include <iostream>
using namespace std;
void func(int n)
{
int sum = 1;
for (int i = 2; i <= n / 2; i++)
{
if (n%i == 0)
{
sum += i;
}
}
if (sum == n)
{
cout << " " << n;
}
}
int main()
{
int t = 0;
while (cin >> t && t)
{
cout << t << ":";
for (int i = 6; i < t; i++)
func(i);
cout << endl;
}
return 0;
}
运行结果