hello kity
期待您的批阅,由于写解题报告时 不一定考虑的很周到,所以如果您有什么不懂的地方,请您留言,然而一天之内我肯定会看见您信息,再对代码注释详细,让您更好的阅读
分类
最新评论
最新留言
链接
RSS
计数器
223062
功能
POJ (2262 Goldbach's Conjecture)
spoiler
posted @ 2011年5月02日 15:25
in 数论
, 1606 阅读
题目大意:给你一个大于等于6的偶数,让你求出两个奇素数,a,b 满足 x=a+b; a,b也许有多对,但是只需要求出 b-a最大的那对!
题目分析: 这题直接暴力就可以了,先求出奇素数,第一队就是满足条件的了
代码://pku 2909 pku2262 hdu1397 AC代码都差不多
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int s[500020]; int flag[1000002]={0}; void init(){ int k=1; for(int i=2;i<=1000000;i+=2) flag[k]=1;//“0”代表是奇素数,”1“代表不是! for(int i=3;i<=1000000;i+=2){ if(!flag[i]){ s[k++]=i; for(int j=2*i;j<=1000000;j+=i) flag[j]=1; } } } int main(){ init(); long n,i; while(scanf("%ld",&n),n){ if(n%2==1) continue; long long p=n/2+1; for(i=1;s[i]<=p;i++){ int k=n-s[i]; if(!flag[k]){ printf("%ld = %d + %d\n",n,s[i],k); break;//注意第一对就是题目要的,这里要直接跳出了 不然TLE } } if(i>p) printf("Goldbach's conjecture is wrong.\n");//这里要不要无所谓 其实 } return 0; }