#include <iostream>
#include <vector>
using namespace std;

// 计算一个数的所有因子之和
int getFactorSum(int num) {
    int sum = 0;
    for (int i = 1; i <= num / 2; i++) {
        if (num % i == 0) {
            sum += i;
        }
    }
    return sum;
}

int main() {
    int n;
    cin >> n;
    vector<int> perfectNumbers; // 保存完全数的容器
    for (int i = 2; i <= n; i++) {
        if (getFactorSum(i) == i) { // 判断是否是完全数
            perfectNumbers.push_back(i);
        }
    }
    for (int i = 0; i < perfectNumbers.size(); i++) {
        cout << perfectNumbers[i] << endl;
    }
    return 0;
}

代码解析:

  1. getFactorSum(int num) 函数: 该函数用于计算一个数 num 的所有因子之和。循环遍历从 1 到 num/2 的所有数,如果 num 能被 i 整除,则将 i 加到 sum 中。
  2. main() 函数:
    • 读取用户输入的 n,表示要查找的范围上限。
    • 创建一个 vector 容器 perfectNumbers,用于存储找到的完全数。
    • 使用循环遍历 2 到 n 之间的每个数,调用 getFactorSum() 函数计算每个数的因子之和。
    • 如果一个数的因子之和等于它本身,则将其添加到 perfectNumbers 容器中。
    • 最后,循环遍历 perfectNumbers 容器,将每个完全数输出到控制台。

代码示例:

输入:

7

输出:

6

解释:

6 的因子为 1, 2, 3,它们的和等于 6,所以 6 是一个完全数。

注意:

代码中使用 vector 容器存储完全数是为了方便后续操作,例如排序、查找等。

扩展:

可以通过修改代码来实现寻找更大的范围内的完全数,或者寻找更多类型的数,例如奇完全数等。

C++ 寻找完全数:代码实现与解释

原文地址: https://www.cveoy.top/t/topic/qzev 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录