uva 10168 哥德巴赫猜想
Posted zzq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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\n",i,N-i); 35 ok=0; 36 break; 37 } 38 } 39 } 40 return 0; 41 }
以上是关于uva 10168 哥德巴赫猜想的主要内容,如果未能解决你的问题,请参考以下文章