以前一直覺得做算法題浪時間,現在才體會到它的重要性。哎,以後堅持每天刷吧......
哥德巴赫猜想:任一大於2的偶數,都可表示成兩個素數之和,維基裡面講的很詳細。
根據這個思路寫代碼就行了。
#include<iostream> #include<cmath> using namespace std; bool isPrime(int); void Find(int); /** 任何大於4的偶數都可以表示成兩個素數之和 **/ int main() { int number; while(cin>>number) { if(number<8) //2+2+2+2 不可能有更小的和了 cout<<"Impossible."<<endl; else { if(number%2==0) { cout<<2<<" "<<2<<" "; Find(number-4); //偶數減去4還是偶數 } else { cout<<2<<" "<<3<<" "; Find(number-5); //奇數減去5為偶數 } } } return 0; } bool isPrime(int testNumber) { if(testNumber<=2) return true; if(testNumber%2==0) return false; //testNumber 必定為大於3的奇數 for(int i=3;i<=ceil(sqrtl(testNumber));i=i+2) if(testNumber%i==0) return false; return true; } void Find(int number) { for(int i=2;i<=(number)/2;i++) if(isPrime(i)&&isPrime(number-i)) { cout<<i<<" "<<number-i<<endl; return; } }