题解 | #查找组成一个偶数最接近的两个素数#
查找组成一个偶数最接近的两个素数
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的情况是优先保持间隔最小,再此基础上寻找两素数之和等于输入的结果。