Goldbach’s Conjecture
题目链接
题目大意
给你一个偶数,让你去计算有多少组不同的质数相加等于这个偶数。
比如10=5+5、10=3+7,所以10的答案是2.
题解
直接打表暴力了…因为数据很小嘛
代码
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;
int n,tab[33000],h;
int vis[33000];
void settab(int high)
{
h=0;
memset(tab,0,sizeof(tab));
memset(vis,0,sizeof(vis));
for (int i=2;i<=high;i++) if (!vis[i])
{
int j=i+i;
tab[h++]=i;
vis[i]=2;
while (j<=high)
{
vis[j]=1;
j+=i;
}
}
}
int ser(int l,int r,int k)
{
int mid=(l+r)>>1,ll=l,rr=r;
while (ll!=rr)
{
if (k<=tab[mid]) rr=mid;
else ll=mid+1;
mid=(ll+rr)>>1;
}
return ll;
}
int main()
{
settab(32768);
while(scanf("%d",&n),n!=0)
{
int p=ser(0,h-1,n),ans=0;
for (int i=0;i<=p;i++)
{
if (tab[i]>n/2) break;
if (vis[n-tab[i]]==2) ans++;
}
printf("%d\n",ans);
}
return 0;
}