uva 10168 哥德巴赫猜想

https://vjudge.net/problem/UVA-10168

   给出一个整数n,问是否能将它化为四个素数相加的形式,如果可以的话就输出这四个数。显然n<8时是不可能的。对于大于等于8得数,如果是个奇数,可以将其-2-3形成一个偶数,同理将偶数-2-2形成另一个偶数。哥德巴赫猜想是对于任意大于等于6的偶数都能分解为两个奇素数的和,正好将这个偶数再次分为两个素数加上前面的两个凑成四个。

  
ps.难道数据很弱么1000w的范围竟然30ms就跑完了欸

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<vector>
 5 #include<cmath>
 6 using namespace std;
 7 #define LL long long
 8 #define inf 0x3f3f3f3f
 9 bool is[10000005];
10 void prepare()
11 {
12     is[0]=is[1]=1;
13     int m=sqrt(10000000+0.5);
14     for(int i=2;i<=m;++i)
15     {
16         if(!is[i]){
17             for(int j=i*i;j<=10000000;j+=i)
18                 is[j]=1;
19         }
20     }
21 }
22 int main()
23 {
24     int N,i,j,k;
25     prepare();
26     while(scanf("%d",&N)==1){
27             if(N<8) {puts("Impossible.");continue;}
28             if(N%2==1){printf("2 3");N-=5;}
29             else      {printf("2 2");N-=4;}
30             int m=N/2;
31             bool ok=1;
32             for(i=2;;i++){
33                 if(is[i]==0&&is[N-i]==0){
34                     printf(" %d %d
",i,N-i);
35                     ok=0;
36                     break;
37                 }
38             }
39     }
40     return 0;
41 }
原文地址:https://www.cnblogs.com/zzqc/p/7470626.html