C++输入数字n,找到小于n的相邻两个差距最大的素数,(如果差相同,则输出数字较小的那一组)。
时间: 2024-05-16 16:18:36 浏览: 87
以下是一个可以解决这道题目的 C++ 代码:
```c++
#include <iostream>
#include <cmath>
using namespace std;
// 判断一个数是否是素数
bool isPrime(int n) {
if (n <= 1) return false;
int sqr = sqrt(n);
for (int i = 2; i <= sqr; i++) {
if (n % i == 0) return false;
}
return true;
}
int main() {
int n;
cin >> n;
int maxDiff = 0; // 最大差距
int prevPrime = 2; // 前一个素数
int prevNum = 2; // 前一个数
for (int i = 3; i <= n; i++) {
if (isPrime(i)) {
int diff = i - prevPrime; // 计算差距
if (diff > maxDiff) {
maxDiff = diff;
cout << prevNum << " " << prevPrime << endl;
}
else if (diff == maxDiff) {
cout << prevNum << " " << prevPrime << endl;
}
prevPrime = i; // 更新前一个素数
prevNum = i - diff; // 更新前一个数
}
}
return 0;
}
```
该程序首先定义了一个 `isPrime` 函数,用于判断一个数字是否是素数。之后,程序从 3 开始遍历到 `n`,如果当前数字是素数,就计算它和前一个素数的差距,并与之前计算得到的最大差距进行比较。如果当前差距更大,则更新最大差距,并输出对应的数字组合。如果当前差距与最大差距相同,则输出数字较小的组合。最后更新前一个素数和前一个数字,并继续遍历。
阅读全文