poj 2262(水题)

来源:互联网 发布:远程语音软件 编辑:程序博客网 时间:2024/06/01 07:39

代码如下

#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>bool is_prime[1000005];int prime[1000005];using namespace std;int main(){memset(prime,0,sizeof(prime));int p=0;for(int i=0;i<=1000000;i++)  is_prime[i]=true;is_prime[0]=false; is_prime[1]=false;for(int i=2;i<=1000000;i++){if(is_prime[i]){prime[p++]=i;for(int j=2*i;j<=1000000;j+=i)  is_prime[j]=false;}}int n;while(scanf("%d",&n)&&n!=0){int end;for(int i=0;i<p;i++) {if(prime[i]>=n) {end=i-1;break;}}int is_end=0;for(int i=end;i>=0;i--){for(int j=0;j<=i;j++){if(prime[i]+prime[j]>n) break;if(prime[i]+prime[j]==n)  {printf("%d = %d + %d\n",n,prime[j],prime[i]);is_end=1;break;}}if(is_end==1) break; } if(is_end==0)  printf("Goldbach's conjecture is wrong.\n"); }} 

不过处理的时候写麻烦了

既可以用判断素数也可以埃氏筛法

关键在于

  1. j = n-i;  
  2.             if(prime(j) && prime(i))  
  3.             {  
  4.                 cout << n <<" = " << i << " + " << j << endl;  
  5.                 break;  
  6.             }  

原创粉丝点击