以前一直觉得做算法题浪时间,现在才体会到它的重要性。哎,以后坚持每天刷吧......
哥德巴赫猜想:任一大于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; } }