区间里的亲和数对C++有输入有输出该怎么写
时间: 2024-12-23 07:27:16 浏览: 14
在C++中,区间内的亲和数对是指一对正整数,其中每个数字都是另一个数字的倍数,并且这两个数字都位于给定的区间内。编写程序来找出这样的数对,通常会涉及到遍历区间并检查每对符合条件的数字。
以下是一个简单的示例,使用`cin`和`cout`从用户那里获取区间范围,然后在该范围内寻找亲和数对:
```cpp
#include <iostream>
#include <vector>
// 检查两个数是否构成亲和数对
bool areAmicable(int a, int b) {
long long sumA = sum(b);
long long sumB = sum(a);
// 验证条件:a != b,两者互为倍数,且它们各自的数字之和相等
return (a != b) && (sumA == b && sumB == a);
}
// 计算数字的数字之和
long long sum(int n) {
long long result = 0;
for (int i = 2; i * i <= n; ++i) {
if (n % i == 0) {
result += i;
if (i * i != n) { // 如果不是完全平方数,还需加上除数
result += n / i;
}
}
}
return result;
}
int main() {
int start, end;
std::cout << "请输入区间范围的起始和结束值:";
std::cin >> start >> end;
std::vector<std::pair<int, int>> amicablePairs;
for (int i = start; i <= end; ++i) {
for (int j = i + 1; j <= end; ++j) {
if (areAmicable(i, j)) {
amicablePairs.push_back(std::make_pair(i, j));
}
}
}
if (amicablePairs.empty()) {
std::cout << "区间内没有亲和数对。\n";
} else {
std::cout << "区间内的亲和数对有:\n";
for (const auto& pair : amicablePairs) {
std::cout << "(" << pair.first << ", " << pair.second << ")\n";
}
}
return 0;
}
阅读全文