輸入多個整數 n(以 0 結束),對每個 n 輸出不大於 n 的所有完數(完數 = 所有真因子之和等於自身,如 6=1+2+3)。輸出格式:n: 完數1 完數2 ...。
n,遍歷完數列表輸出 ≤ n 的值。#include <cstdlib>
#include <iostream>
#include <vector>
#include <cstdio>
using namespace std;
const int MAX = 10000;
int main() {
vector<int> perfect;
for (int i = 2; i < MAX; ++i) {
int sum = 0;
for (int j = 1; j <= i / 2; ++j)
if (i % j == 0) sum += j;
if (sum == i) perfect.push_back(i);
}
int n;
while (cin >> n && n != 0) {
cout << n << ":";
for (int p : perfect) {
if (p <= n) cout << " " << p;
else break;
}
cout << endl;
}
return EXIT_SUCCESS;
}
i/2,減少循環次數。