poj 2262 Goldbach's Conjecture
2011-07-22 14:59
246 查看
#include <iostream> using namespace std; int prime[100000],end; bool test(int a) { if(a%2==0) return false; for(int i=3;i*i<=a;i+=2) { if(a%i==0) return false; } return true; } void init() { int j=0; for(int i=3;i<=1000003;++i) { if(test(i)) prime[j++]=i; } end=j-1; } int find(int n) { int b=0,e=end,mid=(b+e)/2; while(!(prime[mid]<n&&n<prime[mid+1])) { if(n>prime[mid+1]) { b=mid+1; mid=(b+e)/2; } else { e=mid; mid=(b+e)/2; } } return mid; } int main() { init(); int n,s,i,j,tag; while(cin>>n&&n) { s=find(n); tag=0; for(i=0;i<=s;++i) { for(j=s;j>=0;--j) { if(prime[i]+prime[j]<=n) break; } if(prime[i]+prime[j]==n) { tag=1; printf("%d = %d + %d\n",n,prime[i],prime[j]); break; } } if(!tag) printf("Goldbach's conjecture is wrong.\n"); //事实上不用打印这句,因为还未被证明Wrong } return 0; } //#include <iostream> //ac,水过,不用打素数表,直接一个个地试验直到找出结果 //using namespace std; //bool prime(int a) //{ // if(a%2==0) // return false; // for(int i=3;i*i<=a;i+=2) // { // if(a%i==0) // return false; // } // return true; //} //int main() //{ // int n,i; // while(cin>>n&&n) // { // for(i=3;i<n;i+=2) // { // if(prime(i)&&prime(n-i)) // break; // } // printf("%d = %d + %d\n",n,i,n-i); // } // return 0; //}
相关文章推荐
- POJ2262-Goldbach's Conjecture
- POJ2262 Goldbach's Conjecture
- POJ 2262 Goldbach's Conjecture
- POJ 2262 Goldbach's Conjecture
- POJ 2262 Goldbach's Conjecture
- POJ 2262 Goldbach's Conjecture (打表)
- poj 2262 Goldbach's Conjecture(素数筛选法)
- POJ 2262 Goldbach's Conjecture 数学常识 难度:0
- POJ 2262 Goldbach's Conjecture (素数判断)
- POJ 2262 Goldbach's Conjecture(Eratosthenes筛法)
- poj 2262 Goldbach's Conjecture【质数和】
- POJ 2262 Goldbach's Conjecture
- poj 2262 Goldbach's Conjecture
- poj 2262 Goldbach's Conjecture
- POJ 2262:Goldbach's Conjecture
- Poj 2262 / OpenJudge 2262 Goldbach's Conjecture
- poj 2262 Goldbach's Conjecture 素数 水题
- POJ 2262 Goldbach's Conjecture
- poj 2909 Goldbach's Conjecture (哥德巴赫猜想)
- poj 2262 Goldbach's Conjecture 素数 水题