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

题目

一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如: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;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容