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

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

http://www.nowcoder.com/practice/f8538f9ae3f1484fb137789dec6eedb9

#include<bits/stdc++.h>
using namespace std;
bool isprime(int n) {    //判断一个数是否为素数,返回值为bool类型
    for(int i=2;i<=sqrt(n);i++) {
        if(n%i==0)
            return false;
    }
    return true;
}
int main() {
    int n;
    while(cin>>n) {    //输入一个偶数n
        vector<pair<int, int>> record;    //记录所有和为n的素数对
        vector<int> diff;    //记录每组素数对差值的绝对值
        for(int i=n-1;i>0;i--) {    //记录1到n-1之间所有素数对
            if(isprime(i) && isprime(n-i)) {    //判断i和n-i是否都为素数
                record.push_back(make_pair(i, n-i));    //保存当前的素数对
                diff.push_back(abs(2*i-n));    //保存当前素数对差值的绝对值
            }
        }
        vector<int>::iterator it;    //迭代器
        it=min_element(diff.begin(), diff.end());    //返回值差值绝对值最小的元素的指针
        pair<int, int> tmp = record[it-diff.begin()];    //it-diff.begin()代表该元素下标,在容器record中获取这个下标的元素
        cout<<tmp.second<<endl;    //由小到大输出两个素数的值,所以先输出second
        cout<<tmp.first<<endl;    //再输出first
    }
    return 0;
}
全部评论

相关推荐

10-30 10:16
南京大学 Java
龚至诚:给南大✌️跪了
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务