在C++中查詢小於或等於給定數字的最大特殊素數


假設我們有一個數字n。我們必須找到小於或等於N的最大特殊素數。特殊素數是一個數字,可以透過將數字一個接一個地放置來建立,因此所有生成的數字都是素數。

在這裡,我們將使用埃拉托色尼篩法。我們將建立一個高達數字n的篩陣列。然後從數字N迭代地向後開始,檢查數字是否為素數。當它是素數時,檢查它是否是特殊素數。

示例

 線上演示

#include<iostream>
using namespace std;
bool isSpecialPrime(bool sieve[], int num) {
   while (num) {
      if (!sieve[num]) {
         return false;
      }
      num /= 10;
   }
   return true;
}
void findSpecialPrime(int N) {
   bool sieve[N + 10];
   for(int i = 0; i<N+10; i++){
      sieve[i] = true;
   }
   sieve[0] = sieve[1] = false;
   for (long long i = 2; i <= N; i++) {
      if (sieve[i]) {
         for (long long j = i * i; j <= N; j += i) {
            sieve[j] = false;
         }
      }
   }
   while (true) {
      if (isSpecialPrime(sieve, N)) {
         cout << N << '\n';
         break;
      }
      else
         N--;
   }
}
int main() {
   cout << "Special prime in range (2 -> 400): ";
   findSpecialPrime(400);
   cout << "Special prime in range (2 -> 100): ";
   findSpecialPrime(100);
}

輸出

Special prime in range (2 -> 400): 379
Special prime in range (2 -> 100): 79

更新於:2019年12月18日

387 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告