用C++表示一個數為儘可能多的素數之和


討論一個問題:給定一個數字N,我們需要將其分解為儘可能多的素數之和,例如

Input: N = 7
Output: 2 2 3
Explanation: 7 can be represented as the sum of two 2’s and a 3 which are the maximum possible prime numbers.

Input : N = 17
Output: 2 2 2 2 2 2 2 3

尋找解決方案的方法

為了將一個數表示為素數之和,我們可以從N中減去一個素數,並檢查差值是否為素數。如果差值是素數,那麼我們可以將N表示為兩個素數之和。

但是在這裡,我們必須找到儘可能多的素數,為此,我們應該選擇最小的素數,即2和3。我們可以用2和3的和來構成任何數。

  • 檢查偶數的個數;如果是偶數,它可以由(N/2)個2的和構成。

  • 如果是奇數,它可以由一個3和[(N-3)/2]個2的和構成。

  • 透過這種方式,我們可以用盡可能多的素數之和來表示N。

示例

#include <bits/stdc++.h>
using namespace std;
int main(){
   int N = 7;
   // checking if N is odd,
   // If yes, then print 3
   // and subtract 3 from N.
   if (N & 1 == 1) {
      cout << "3 +";
      N -= 3;
   }
   // // keep subtracting and printing 2
   // until N is becomes 0.
   while (N!=2) {
      cout << " 2 +";
      N -= 2;
   }
   cout << " 2";
   return 0;
}

輸出

3 + 2 + 2

結論

在本教程中,我們討論瞭如何將一個數表示為儘可能多的素數之和。我們討論了一種簡單的解決方法,即將數字表示為2和3的和。我們還討論了這個問題的C++程式,我們可以使用C、Java、Python等程式語言來實現。希望本教程對您有所幫助。

更新於:2021年11月26日

瀏覽量:196

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.