题目描述
哥德巴赫猜想:每个大于4的偶数可以写成两个奇素数的和。
利用筛法求素数,遍历素数,判断n-某个素数是否也是素数
埃氏筛&&欧拉筛
#include<iostream>
using namespace std;
bool u[1111111];
int su[1111111],num;
//埃氏筛
void prepare(){
for(int i=2;i<=1000000;i++) u[i]=true;
for(int i=2;i<=1000000;i++)
if(u[i])
for(int j=2;j*i<=1000000;j++)
u[j*i]=false;
for(int i=2;i<=1000000;i++)
if(u[i])
su[++num]=i;
}
//欧拉筛
//void prepare(){
//memset(u,true,sizeof(u));
//u[0]=u[1]=false;
//for(int i=2;i<=1000000;i++){
// if(u[i]){
// su[num++]=i;
// }
// for(int j=0;j<num;j++){
// if(i*su[j]>1000000) break;
// u[i*su[j]]=false;
// if(i%su[j]==0) break;
// }
//}
//}
int main(){
prepare();
int n;
while(cin>>n&&n){
//bool flag=false;
int i;
for(i=2;i<=num;i++){
if(su[i]*2>n)break;
if(u[n-su[i]]){
//flag=true;
break;
}
}
//if(flag)
//{
cout<<n<<" = "<<su[i]<<" + "<<n-su[i]<<endl;
//}
// else{
// cout<<"Goldbach's conjecture is wrong."<<endl;
// }
// 不用输出哥德巴赫是错误的也可以过的。。。。。
}
return 0;
}