用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等程式語言來實現。希望本教程對您有所幫助。
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP