c++中以内的素数倒数之和,编写程序求给整数n的“亲密对数”
时间: 2024-10-24 20:13:41 浏览: 32
在C++中,计算某个整数n的“亲密对数”(也称为"amicable numbers"),就是寻找一对数a和b,满足a的所有正因数(除了a本身)之和等于b,同时b的所有正因数之和又恰好等于a。这种特殊的数字对被称为亲密数。
下面是一个简单的C++程序,用于找到小于给定n的所有亲密对,并仅打印出它们:
```cpp
#include <iostream>
#include <vector>
using namespace std;
bool isAmicable(int num) {
long long sum_of_factors = 0;
for (int i = 1; i * i <= num; ++i) {
if (num % i == 0) {
if (i != num / i) { // 如果不是本身的平方根,则包含两个因子
sum_of_factors += i;
sum_of_factors += num / i;
} else {
sum_of_factors += i; // 如果是本身的平方根,只加一次
}
}
}
return sum_of_factors == num && isAmicable(sum_of_factors);
}
void findAmicablePairs(int n) {
vector<int> amicable_pairs;
for (int i = 2; i < n; ++i) {
if (isAmicable(i)) {
amicable_pairs.push_back(i);
}
}
cout << "Number of amicable pairs found: " << amicable_pairs.size() << endl;
for (int pair : amicable_pairs) {
cout << "Pair: (" << pair << ", " << isAmicable(pair) ? pair : "sum not equal to " << pair << ")" << endl;
}
}
int main() {
int target_n;
cout << "Enter a number: ";
cin >> target_n;
findAmicablePairs(target_n);
return 0;
}
```
当你运行这个程序并输入一个整数,它会找出所有小于该数的亲密数对,并显示它们的数量以及具体的数值。注意,这个程序对于大数可能会比较慢,因为需要检查每个数的因子。
阅读全文