用C++解决完数问题
时间: 2024-11-09 21:26:34 浏览: 55
在C++中,解决完数问题是通过遍历并检查每个正整数是否为完数。完数也被称为完美数,是指该数的所有真因子(除了自身之外的因数)加起来正好等于它自身的数。例如6是一个完数,因为1+2+3=6。
下面是一个简单的C++函数示例,用于找出给定范围内的所有完数:
```cpp
#include <iostream>
#include <vector>
bool isPerfectNumber(int num) {
int sum = 0;
for (int i = 1; i * i <= num; ++i) { // 只需要检查到sqrt(num),避免重复计算
if (num % i == 0) {
if (i != num / i) { // 如果不是平方根,则有两个因子
sum += i;
}
sum += num / i; // 否则是平方根,直接加上
}
}
return sum == num && num > 1; // 完全数大于1且其因子之和等于它本身
}
void findPerfectNumbersInRange(int start, int end) {
std::vector<int> perfects;
for (int num = start; num <= end; ++num) {
if (isPerfectNumber(num)) {
perfects.push_back(num);
}
}
if (!perfects.empty()) {
std::cout << "在范围[" << start << ", " << end << "]内找到的完美数有:";
for (const auto& perfect : perfects) {
std::cout << perfect << " ";
}
} else {
std::cout << "范围内没有找到完美数。";
}
}
int main() {
int rangeStart = 1, rangeEnd = 1000; // 调用函数,查找1到1000之间的完数
findPerfectNumbersInRange(rangeStart, rangeEnd);
return 0;
}
```
阅读全文