7-2 求一定范围内的所有完数 (12分)

题目

一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如:6的因子为1,2,3,而6=1+2+3,因此6是“完数”。编程找出任意两正整数m和n之间的所有完数。

输入格式:

输入在一行中给出2个正整数m和n(1

输出格式:

逐行输出给定范围内每个完数的因子,每个完数占一行,格式为“完数 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 
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;
}

你可能感兴趣的:(7-2 求一定范围内的所有完数 (12分))