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

Goldbach`s Conjecture (数论,素数打表)

2017-05-08 17:54 429 查看
题目来源https://vjudge.net/problem/LightOJ-1259

【题意】

问一个大于2的偶数可以由多少组素数和组成。

坑点:素数打表的判断是否为素数的数组一定要是bool型,不然MLE。

【思路】

素数打表,然后判断就可以了。

【代码】

#include<stack>
#include<queue>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<iostream>
#include<string>
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std;
const int INF=1e9;
typedef long long LL;
bool b[10000000+10];
int prime[700000+10];
int num=1;
int E_F(int p,int *a)
{
int Left=1,Right=num,mid;
while(Left<Right)
{
mid=(Right+Left)/2;
printf("%d %d %d\n",mid,Left,Right);
if(a[mid]==p)
return mid;
else if(a[mid]<p)
Left=mid;
else
Right=mid-1;
}
return Left;
}
int main()
{
mem(b,0);
b[0]=b[1]=1;
for(int i=2;i<=10000000;i++)
{
if(!b[i])
{
prime[num++]=i;
for(int j=i*2;j<=10000000;j+=i)
{
b[j]=1;
}
}
}
int T,cases=1;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
int mid=n/2;
int pos=E_F(mid,prime);
int ans=0;
for(int i=1;i<=pos;i++)
{
if(!b[n-prime[i]])
ans++;
}
printf("Case %d: %d\n",cases++,ans);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: