题解 | #查找组成一个偶数最接近的两个素数#

查找组成一个偶数最接近的两个素数

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的情况是优先保持间隔最小,再此基础上寻找两素数之和等于输入的结果。

全部评论

相关推荐

认真搞学习:28小登的建议,投算法岗不要写什么物理竞赛,互联网+,多写点项目,用什么算法做了什么。还有本科算法是不可能的开发你这个也没有项目啊
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务