使用 C++ 列印小於給定數字的所有素數四元組


在這個問題中,我們給定一個正整數 N,我們需要列印所有小於或等於 n 的素數四元組。

素數四元組是由四個素陣列成的集合,計算公式為 {p, p+2, p+6, p+8}。示例 - 5 7 11 13。

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

Input: N = 15
Output: 5 7 11 13.

為了解決這個問題,一個簡單的方案是生成所有素數 p 的四元組,並檢查 p、p+2、p+6、p+8 是否都是素數。這種方案很容易理解,但對於編譯器來說更復雜。

另一種高效的方案是找到所有素數(使用埃拉託斯特尼篩法),並將它們儲存在一個數組中,直到某個範圍。然後遍歷陣列,並檢查p、p+2、p+6、p+8是否為素數,如果都是素數則列印。

示例

 線上演示

#include <bits/stdc++.h>
using namespace std;
#define MAX 100000
bool prime[MAX];
void primeNumberGenerator() {
   memset(prime, true, sizeof(prime));
   for (int p = 2; p * p < MAX; p++) {
      if (prime[p] == true) {
         for (int i = p * 2; i < MAX; i += p)
            prime[i] = false;
      }
   }
}
void printPrimeQuadruplet(int n) {
   for (int i = 0; i < n - 7; i++) {
      if (prime[i] && prime[i + 2] && prime[i + 6] && prime[i + 8]) {
         cout<<i<<" "<<i+2<<" "<<i+6<<" "<<i+8<<endl;
      }
   }
}
int main() {
   primeNumberGenerator();
   int n = 42;
   cout<<"All prime Quadruplets are :\n";
   printPrimeQuadruplet(20);
   return 0;
}

輸出

所有素數四元組為:

5 7 11 13
11 13 17 19

更新於: 2020年1月17日

121 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告