#include <iostream>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    for (int num = 2; num <= n; num++) {
        int sum = 1; // 1 必定是所有正整数的因子
        for (int i = 2; i * i <= num; i++) {
            if (num % i == 0) {
                sum += i;
                if (num / i != i) {
                    sum += num / i;
                }
            }
        }
        if (sum == num) {
            cout << num << endl;
        }
    }
    
    return 0;
}

程序解析:

  1. 输入 n: 程序首先接收用户输入的正整数 n,代表求解范围的上限。
  2. 循环遍历: 使用 for 循环遍历 2 到 n 之间的每个整数 num
  3. 计算因子之和: 对于每个 num,程序使用另一个 for 循环来计算其所有因子的和,并存储在 sum 变量中。
  4. 判断完美数: 如果 sum 等于 num,则说明 num 是完美数,程序将其输出到控制台。
  5. 优化因子计算: 为了提高效率,程序在计算因子时只遍历到 i * i <= num,因为如果 inum 的因子,那么 num / i 也是 num 的因子,且只需要计算其中较小的那个。

示例:

输入:

7

输出:

6

程序的功能是找到 2 到 n 之间的完美数,并按从小到大顺序输出。

C++ 完美数求解算法

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

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