【MAC 上学习 C++】Day 38-2. 实验4-2-7 找完数 (20 分)

实验4-2-7 找完数 (20 分)

1. 题目摘自

https://pintia.cn/problem-sets/13/problems/452

2. 题目内容

所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。

输入格式:

输入在一行中给出2个正整数m和n(1<m≤n≤10000),中间以空格分隔。

输出格式:

逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。

输入样例:

2 30

输出样例:

6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14

3. 源码参考
#include <iostream>

using namespace std;

int Perfect(int n);
void PrintP(int n);

int main()
{
    int m, n;

    cin >> m >> n;
    for(int i = m; i <= n; i++)
    {
        if(Perfect(i))
        {
            PrintP(i);
        }
    }

    return 0;   
}

int Perfect(int n)
{
    int s;

    s = 0;
    for(int i = 1; i < n; i++)
    {
        if(n % i == 0)
        {
            s += i;
        }
    }

    if(s == n)
    {
        return 1;
    }

    return 0;
}

void PrintP(int n)
{

    cout << n << " = 1";
    for(int i = 2; i < n; i++)
    {
        if(n % i == 0)
        {
            cout << " + " << i;
        }
    }

    cout << endl;

    return;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容