1 //验证2到一百万(任何一个大于2的偶数都可以表示成两个素数之和) 2 #include <iostream> 3 #include <cstring> 4 #include <cmath> 5 using namespace std; 6 7 const int N = 1000000; 8 9 bool vis[N] = {0}; 10 void init_prim() 11 { 12 int i,j,k; 13 int m = (int)(sqrt(N)+0.5); 14 memset(vis,0,sizeof(vis)); 15 vis[0] = 1; 16 vis[1] = 1; 17 for(i=2; i<m; i++) 18 if(!vis[i]) 19 { 20 for(j=2*i; j<N; j+=i) 21 vis[j] = 1; 22 } 23 } 24 25 int main() 26 { 27 int i,j,k; 28 init_prim(); 29 for(i=4; i<N; i+=2) 30 { 31 for(j=2; j<i; j++) 32 { 33 int temp = i-j; 34 if(!vis[j]&&!vis[temp])//为加快速度,可以把素数单独存在数组里 35 { 36 cout<<i<<" = "<<j<<" + "<<temp<<endl; 37 break; 38 } 39 } 40 if(i==j) 41 { 42 cout<<"在"<<i<<"处定理不成立!"<<endl; 43 exit(1);//在此异常退出时并未打印----------- 44 } 45 } 46 cout<<"--------------"<<endl; 47 while(1); 48 return 0; 49 }