查找小于或等于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

以上是 查找小于或等于C ++中给定数字的最大特殊素数 的全部内容, 来源链接: utcz.com/z/316722.html

回到顶部