您的位置:首页 > 编程语言 > Go语言

LightOJ - 1259 Goldbach`s Conjecture (素数筛)

2017-07-21 21:20 369 查看
#include<cstdio>
using namespace std;
/*
给一个偶数n,求有多少对素数为n[4,e^7]
a<=b n=a+b a和b为素数
*/
const int maxn=1e6+5;
const int maxm=1e7+5;
int p;
int prime[maxn];
bool is_prime[maxm];
//素数筛
void sieve(int n)
{
for(int i=0;i<n;i++)
{
is_prime[i]=1;
}
is_prime[0]=is_prime[1]=0;
p=0;
for(int i=0;i<n;i++)
{
if(is_prime[i])
{
prime[p++]=i;
for(int j=2*i;j<n;j+=i)
{
is_prime[j]=0;
}
}
}
}

int main()
{
int T,kase=1,ans;
int n;
sieve(maxm);
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
ans=0;
//枚举素数加数,需要<=n/2
for(int i=0;prime[i]<=n/2;i++)
{
if(is_prime[n-prime[i]])//判断另一个加数
{
ans++;
}
}
printf("Case %d: %d\n",kase++,ans);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: