LightOJ1259-Goldbach`s Conjecture 【素数筛选】

Goldbach's Conjecture

题目

T组询问,每组询问是一个偶数n,验证哥德巴赫猜想回答n=a+b且a,b(a<=b)是质数的方案个数.

分析

我们知道1e7之前有不到1e6个质数,所以我们用埃氏筛法预先把质数筛选出来,vis[]保存是否是质数,P[]从小到大保存质数。对于一个n,只需遍历质数表,假如遍历到P[i],只需看n-P[i]是否大于P[i],并且n-P[i]是质数,如果n-P[i]<P[i]直接break就行

AC 代码

#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const ll maxn = 1e7+10;
int P[1000010],tail;
bool vis[maxn];
ll T,N;
void init(){
    vis[1] = false;
    for(ll i = 2;i<maxn;i++){
        if(!vis[i]){
            P[tail++] = i;
            for(ll j = i*i;j<maxn;j+=i){
                vis[j] = true;
            }
        }
    }
}
ll coun(ll x){
    ll cnt = 0;
    for(int i = 0;i<tail;i++){
        if(x-P[i]<P[i]) break;
        if(!vis[x-P[i]]) cnt++;
    }
    return cnt;
}
int main(){
    init();
    cin>>T;
    int kase = 0;
    while(T--){
        scanf("%lld",&N);
        printf("Case %d: %lld\n",++kase,coun(N));
    }
    return 0;
}
全部评论

相关推荐

11-26 22:34
已编辑
重庆邮电大学 Java
快手 客户端开发 (n+5)k*16 公积金12
牛客895077908号:佬 什么双非硕啊
点赞 评论 收藏
分享
10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
头像
11-06 10:58
已编辑
门头沟学院 嵌入式工程师
双非25想找富婆不想打工:哦,这该死的伦敦腔,我敢打赌,你简直是个天才,如果我有offer的话,我一定用offer狠狠的打在你的脸上
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务