题解 | #查找组成一个偶数最接近的两个素数#
查找组成一个偶数最接近的两个素数
https://www.nowcoder.com/practice/f8538f9ae3f1484fb137789dec6eedb9
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
if (n == 4) {
cout << 2 << endl;
cout << 2 << endl;
return 0;
}
vector<int> num;
num.push_back(2);
num.push_back(3);
// 寻找输入范围内的所有素数。
for (int i = 4; i < n; i++) {
int signal = 0;
for (auto& tmp : num) {
if (tmp * (i / tmp) == i) {
signal = 1;
break;
}
}
if (signal == 0) {
num.push_back(i);
}
}
int left = 0, right = 0;
for (int i = 0; i <= (num.size()); i++) {
// 选择输出逻辑1
if(num[i] == (n/2)){
cout << num[i] << endl;
cout << num[i] << endl;
return 0;
}
// 如果不相等,则进入后续的逻辑2
else if (num[i] > (n/2)) {
left = i - 1;
right = i;
break;
}
}
int tmp = num[left] + num[right];
while (tmp != n) {
if (tmp < n) {
right++;
} else {
left--;
}
tmp = num[left] + num[right];
}
cout << num[left] << endl;
cout << num[right] << endl;
return 0;
}
// 64 位输出请用 printf("%lld")
这里逻辑2的情况是优先保持间隔最小,再此基础上寻找两素数之和等于输入的结果。
哔哩哔哩公司氛围 717人发布