列出完数

题目描述
请从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;
}

运行结果
列出完数