用C++ 完成以下题目:完全数:输入一个数,判断该数是不是完全数(该数=所有小于自身因子的总和,如28的因子有:1/2/4/7/14,之和=28)
时间: 2024-09-26 11:13:17 浏览: 38
算法-求正整数2和n之间的完全数(信息学奥赛一本通-T1150).rar
5星 · 资源好评率100%
在C++中,你可以使用以下函数来判断一个数是否为完全数:
```cpp
#include <iostream>
#include <vector>
bool isPerfectNumber(int num) {
if (num <= 1) {
return false;
}
std::vector<int> factors; // 存储因子
for (int i = 1; i * i <= num; i++) {
if (num % i == 0) {
// 如果i是因子,那么它的配对因子就是num/i
int factor = num / i;
factors.push_back(i);
// 也检查factor是否也是因子
if (factor != i && factor > i) {
factors.push_back(factor);
}
}
}
// 计算因子之和
int sum = std::accumulate(factors.begin(), factors.end(), 0);
return sum == num;
}
int main() {
int number;
std::cout << "请输入一个整数:";
std::cin >> number;
if (isPerfectNumber(number)) {
std::cout << number << " 是一个完全数。" << std::endl;
} else {
std::cout << number << " 不是一个完全数。" << std::endl;
}
return 0;
}
```
在这个程序中,我们首先从1遍历到sqrt(num),找到所有的因子,并将其添加到`factors`向量中。然后计算因子的总和,如果这个总和等于原始输入的数,就说明它是完全数。
阅读全文