求m~n的自守数,枚举法C++
时间: 2024-10-13 13:09:23 浏览: 5
在C++中,枚举法求解m到n之间的自守数,即能表示自身所有因子之和等于自身的正整数,可以采用循环遍历的方式来实现。以下是简单的示例代码:
```cpp
#include <iostream>
#include <vector>
using namespace std;
// 自守数函数
bool isAbundant(int num) {
int sum = 0;
for (int i = 1; i * i <= num; ++i) {
if (num % i == 0) {
if (i != num / i) { // 如果有除数大于1
sum += i + num / i;
} else {
sum += i; // 如果只有一个因子
}
}
}
return sum > num;
}
// 枚举并查找自守数
void findAbundants(int m, int n) {
vector<int> abundantNumbers;
for (int num = m; num <= n; ++num) {
if (isAbundant(num)) {
abundantNumbers.push_back(num);
}
}
cout << "自守数在范围 [" << m << ", " << n << "] 为:";
for (const auto& num : abundantNumbers) {
cout << num << " ";
}
cout << endl;
}
int main() {
int m, n;
cout << "请输入m和n的值,其中m <= n: ";
cin >> m >> n;
findAbundants(m, n);
return 0;
}
```
在这个代码里,`isAbundant()` 函数用于判断一个数是否是自守数,`findAbundants()` 函数则负责寻找指定范围内所有的自守数。用户需要输入起始值 `m` 和结束值 `n`,程序会输出该范围内的自守数。