打印完数
描述
一个数如果恰好等于它的因子之和,这个数就成为“完数”。例如,6的因子为1、2、3,而6=1+2+3,因此6是“完数”。编程序打印出1000之内(包括1000)所有的完数,并按如下格式输出其所有因子:6 its factors are 1 2 3 要求:1、编写判断一个数是否为完数的函数。
输入
无输入
输出
输出1000以内所有的完数及其因子,每行一个完数,最后没有空格。
输入样例 1
本题无输入样例
输出样例 1
输出1000以内所有的完数及其因子,每行一个完数,每个因子后面有一个空格。
提示
HINT 时间限制:200ms 内存限制:64MB
#include <iostream>
#include <vector>
using namespace std;
// 判断是否为完数的函数
bool isPerfectNumber(int num, vector<int>& factors) {
int sum = 0;
// 清空因子列表
factors.clear();
// 找出所有因子并求和
for (int i = 1; i < num; ++i) {
if (num % i == 0) {
factors.push_back(i);
sum += i;
}
}
// 如果因子之和等于数本身,返回true
return sum == num;
}
int main() {
// 遍历1000以内的所有数
for (int i = 1; i <= 1000; ++i) {
vector<int> factors;
// 如果是完数,打印结果
if (isPerfectNumber(i, factors)) {
cout << i << " its factors are ";
for (size_t j = 0; j < factors.size(); ++j) {
cout << factors[j];
if (j != factors.size() - 1) {
cout << " "; // 因子之间有空格,最后一个因子后没有空格
}
}
cout << endl; // 输出完毕换行
}
}
return 0;
}