演算法之每日一題:哥德巴赫猜想
阿新 • • 發佈:2019-02-10
#include<stdio.h> #include<math.h> //是否是素數 int is(int x){ int k=sqrt((float)x); int i; for(i=2;i<=k;i++) if(x%i==0) break; if(x==1) return 0; else if(x==2||x==3||i>k) return 1; else return 0; } //時間複雜度:O(nloglogn) //空間複雜度:O(n) //即任一大於2的偶數都可寫成兩個素數之和,亦稱為“強哥德巴赫猜想”或“關於偶數的哥德巴赫猜想”。 int main(){ int i,j,k,x; while(scanf("%d",&x)!=EOF,x){ if(x%2!=0) { printf("%d不是偶數\n",x); } if(is(x-2)){ printf("2 %d\n",x-2); continue; } for(i=3;i<=x/2;i+=2){ if(is(i)&&is(x-i)){ printf("%d %d\n",i,x-i); break; } } } return 0; }