本文主要是介绍【HDU】 1397 Goldbach's Conjecture,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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;
}
这篇关于【HDU】 1397 Goldbach's Conjecture的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!