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

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

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

#include <climits>
#include <iostream>
#include <linux/limits.h>
#include<vector>
#include<climits>
using namespace std;

bool isprime(int n) {
    if (n <= 1) return false;
    if (n <= 3) return true;
    if (n % 2 == 0 || n % 3 == 0) return false;
    for (int i = 5; i * i <= n; i += 6) {
        if (n % i == 0 || n % (i + 2) == 0) return false;
    }//除去2和3,质数必为6k+1或6k-1的形式,非2,3倍数的其他这类6k+-1的数只要不是比它小的质数的倍数即可,并且只用检查到根号n。
    return true;
}

int main() {
    int n;
    cin>>n;
    vector<int> A,B;
    if (isprime(n-2)) {
        A.push_back(2);
        B.push_back(n-2);
    }
    if (isprime(n-3)) {
        A.push_back(3);
        B.push_back(n-3);
    }
    for(int i = 1; (6*i - 1) <= (n/2) ; i++){
        if(isprime(6*i-1)){
            if(isprime(n-6*i+1)){
                A.push_back(6*i-1);
                B.push_back(n-6*i+1); 
            }
        }
        if(isprime(6*i+1)){
            if(isprime(n-1-6*i)){
                A.push_back(6*i+1);
                B.push_back(n-1-6*i); 
            }
        }
    }
    int y =INT_MAX;
    int num = 0;
    for(int j = 0 ;j<A.size() ;j++ ){
        if(y > abs((A[j]-B[j]))){
            y = abs((A[j]-B[j]));
            num = j ;
        }
    }
    cout<<min(A[num],B[num])<<endl;
    cout<<max(A[num],B[num])<<endl;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

投递长鑫存储等公司7个岗位
点赞 评论 收藏
分享
程序员小白条:找的太晚,别人都是大三实习,然后大四秋招春招的,你大四下了才去实习,晚1年
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
昨天 13:47
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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