题目
一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如:6的因子为1,2,3,而6=1+2+3,因此6是“完数”。编程找出任意两正整数m和n之间的所有完数。
输入格式:
输入在一行中给出2个正整数m和n(1<m≤n≤1000),中间以空格分隔。
输出格式:
逐行输出给定范围内每个完数的因子,每个完数占一行,格式为“完数 its factors are 1,2,3”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“Not Found!”。
输入样例1:
3 30
输出样例1:
6 its factors are 1,2,3
28 its factors are 1,2,4,7,14
输入样例2
600 900
输出样例2
Not Found!
代码:
#include <iostream>
int main(int argc, char *argv[])
{
int Sum = 0; //记录完数个数
int m, n; //数据范围
std::cin >> m >> n;
for (int i = m; i <= n; i++)
{
int d[10000] = {0}; //记录该数的因数
int size = 0; //当前因数位
int sum = 0; //记录因数总和
for (int j = 1; j <= i / 2; j++)
{
if (i % j == 0)
{
d[size] = j;
size++;
sum += j;
}
}
if (i == sum) //判断是否为完数
{
Sum++;
std::cout << i << ' ' << "its factors are ";
for (int t = 0; t < size; t++)
{
if (t != size - 1)
{
std::cout << d[t] << ',';
}
else
{
std::cout << d[t] << std::endl;
}
}
}
}
if (Sum == 0)
{
std::cout << "Not Found!" << std::endl;
}
system("pause");
return 0;
}