用 C++ 將奇數表示為質數之和


在這個問題中,我們給定一個奇數 N。我們的任務是 *將奇數表示為質數之和*。

表示該數字時,最多可以有三個質數。

讓我們來看一個例子來理解這個問題:

輸入:N = 55

輸出:53 + 2

解決方案:

奇數可以表示為質數之和。考慮到這些質數,我們有三種情況。

情況 1:如果 n 是質數,則它表示為一個質數 n 的和。
情況 2:如果 (n - 2) 是質數,則它表示為兩個質數 n-2 和 2 的和。

情況 3:(n - 3) 是一個偶數,可以使用哥德巴赫猜想的方法表示為兩個質數之和,在這種方法中,我們將檢查一個數 A 是否為質數,並且數 {(n-3) - A} 是否也為質數,然後打印出來。

程式說明了我們解決方案的工作原理:

示例

線上演示

#include <iostream>
using namespace std;

bool isPrime(int x)
{
   if (x == 0 || x == 1)
      return false;
   for (int i = 2; i * i <= x; ++i)
      if (x % i == 0)
         return false;  
   return true;
}

void primeAsSumofPrime(int n) {
   
   if (isPrime(n) )
      cout<<n;
   else if (isPrime(n - 2))
      cout<<"2 "<<"+ "<<(n - 2);
   else{
      cout<<"3 "<<"+ ";
      n -= 3;
      for (int i = 0; i < n; i++) {
         if (isPrime(i) && isPrime(n - i)) {
            cout<<i<<" + "<<(n - i);
            break;
         }
      }
   }
}

int main() {
   
   int n = 561;
   cout<<"The number "<<n<<" expressed as sum of primes is ";
   primeAsSumofPrime(n);
   return 0;
}

輸出:

The number 561 expressed as sum of primes is 3 + 11 + 547

更新於:2021年1月22日

321 次瀏覽

開啟您的 職業生涯

完成課程獲得認證

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