完美数


include

#include <vector>
using namespace std;

// 计算正整数x的真因数之和 
int sum_proper_divisors(int x) {
    if (x == 1) return 0; // 1没有真因数 
    int sum = 1; // 1是所有数(除1外)的真因数 
    for (int i = 2; i * i <= x; i++) {
        if (x % i == 0) {
            sum += i;          // 添加因数i 
            if (i != x / i)    // 避免重复添加平方根 
                sum += x / i;  // 添加配对的因数x/i 
        }
    }
    return sum;
}

int main() {
    int n;
    cin >> n;
    vector<int> perfect_numbers;

    // 遍历2到n的所有数字(1没有真因数)
    for (int num = 2; num <= n; num++) {
        if (sum_proper_divisors(num) == num) {
            perfect_numbers.push_back(num);
        }
    }

    // 输出结果 
    for (int p : perfect_numbers) {
        cout << p << " ";
    }
    return 0;
}