Summation of Four Primes(歌德巴哈猜想)

來源:互聯網
上載者:User

標籤:style   http   os   io   for   re   

                                                      Summation of Four Primes 

題目連結:click here~

題目要求:

          給出一個整數要你將其拆成由四個素數組成的數。如果,不能拆則輸出“Impossible.”

思路解析:

        根據題目給出的兩個猜想,可以得到。如果,一個數是奇數的話則其一定可以拆成一個奇數+一個偶數的形式,而一個數是偶數的話可拆的就有兩種奇數+奇數/偶數+偶數。而Waring的猜想是一個奇數可以拆成3個素數,所以顯然題目給出的一個整數是奇數的時候我們就不能保留奇數拆偶數了。我們應該一開始就把奇數拆成兩個素數,然後再拆偶數,而一個偶數可以拆成兩個素數是猜想給出的,所以我們可以認為其實正確的。同理,當給出的數是偶數的時候,我們只能是保留兩個偶數的形式,且可以一開始就把一個偶數給拆成兩個素數的形式。然後,遍曆另外一個偶數。而一個為n的整數內的素數個數為n/ln(n)。所以,演算法總時間為O(n/ln(n));


#include <iostream>#include <algorithm>#include <vector>#include <cstdio>#include <cstring>#include <cmath>using namespace std;const int MAXN = 10000000+10;int top,prim[700000];bool vst[MAXN];void Isprim(){    top = 0;    memset(vst,0,sizeof(vst));    vst[0] = vst[1] = 1;    for(int i = 2;i < MAXN;++i)if(!vst[i]){        prim[top++] = i;        for(int j = i+i;j < MAXN;j += i)vst[j] = 1;    }}void output(int n){    for(int i = 0;i < top&&prim[i] < n;++i){       if(!vst[n-prim[i]]){          cout<<prim[i]<<" "<<n-prim[i]<<endl;          break;       }    }}int main(){   Isprim();   //test//   cout<<"top: "<<top<<endl;   int n;   while(cin>>n)   {       if(n<8){          cout<<"Impossible."<<endl;          continue;       }       if(n&1){          cout<<"2 "<<"3 ";          n -= 5;          output(n);       }       else{           cout<<"2 "<<"2 ";           n -= 4;           output(n);       }   }   return 0;}




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.