c++ 给定一个合数n,输出离它最近的质数,如果结果为两个,先输出小的后输出大的,用空格隔开
时间: 2024-12-15 12:20:01 浏览: 9
在 C++ 中,要给定一个合数 `n` 输出与其最近的质数,你可以编写一个简单的算法,通过遍历从 `n - 1` 到 `sqrt(n)` 的整数(因为大于 `sqrt(n)` 的因数必定有一个小于等于它的平方根),检查每个数是否为质数。当找到第一个大于 `n` 的质数或找到比 `n` 小的质数时,就停止搜索并返回结果。
以下是一个简单的函数实现示例:
```cpp
#include <iostream>
#include <cmath>
// 辅助函数,判断一个数是否为质数
bool isPrime(int num) {
if (num <= 1)
return false;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0)
return false;
}
return true;
}
// 主函数,寻找最接近的质数
std::pair<int, int> nearestPrimes(int n) {
int smallerPrime = n - 1; // 先从 n - 1 开始找
while (!isPrime(smallerPrime)) {
smallerPrime--;
if (smallerPrime < 2) { // 如果找到的是1或负数,说明n本身就是质数
break;
}
}
int largerPrime = n + 1; // 同理,从 n + 1 开始找
while (!isPrime(largerPrime)) {
largerPrime++;
}
return std::make_pair(smallerPrime > 2 ? smallerPrime : largerPrime, largerPrime);
}
int main() {
int n;
std::cout << "请输入一个合数:";
std::cin >> n;
auto primes = nearestPrimes(n);
if (primes.first != primes.second) {
std::cout << primes.first << ' ' << primes.second << '\n';
} else {
std::cout << primes.first << "\n"; // 如果结果是相同的,只输出较小的那个
}
return 0;
}
```
在这个程序里,我们首先尝试从 `n - 1` 和 `n + 1` 开始查找,然后逐渐减小或增加找到的质数,直到找到符合条件的质数对。注意,如果 `n` 是质数,则程序会直接输出 `n` 本身,因为它就是最近的质数。
阅读全文