【HDU】 1397 Goldbach's Conjecture

来源:互联网 发布:边际递减效应爱情知乎 编辑:程序博客网 时间:2024/05/19 02:41

Goldbach’s Conjecture


题目链接

  • 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;}
0 0