在C ++中检查数字是否为Primorial Prime

概念

对于给定的正数n,任务是验证n是否为原始质数。如果n是原始质数,我们必须打印“是”,否则打印“否”。

素数素数-对于数学,素数素数定义为形式为pN#+ 1或pN#– 1的素数,其中pN#是pN的素数,使得前N个素数为乘积。

输入-n = 7

输出-是

7是形式为N = 2的pN + 1形式的本原素,本原素是2 * 3 = 6和6 + 1 = 7。

输入-n = 29

输出-是

29是pN-1形式的Primorial素数,N = 3,Primorial是2 * 3 * 5 = 30且30-1 = 29。

在下面的代码中,前几个原始质数被显示-2,3,5,5,7,29,31,211,2309,2311,30029

方法

  • 我们必须通过应用Eratosthenes筛子来生成范围内的所有素数。

  • 验证N是否为质数,如果N不是质数,则打印否

  • 否则,从第一个质数(即2)开始乘以下一个质数,并继续验证乘积+ 1 = N或乘积– 1 = N

  • 已经看到,如果乘积+ 1 = N或乘积-1 = N,则N是原始素数,否则不是。

示例

// CPP program to check Primorial Prime

#include <bits/stdc++.h>

using namespace std;

#define MAX 10000

vector<int> arr1;

bool prime1[MAX];

void SieveOfEratosthenes1(){

   memset(prime1, true, sizeof(prime1));

   for (int p = 2; p * p < MAX; p++) {

      if (prime1[p] == true) {

         for (int i = p * 2; i < MAX; i += p)

            prime1[i] = false;

      }

   }

   for (int p = 2; p < MAX; p++)

      if (prime1[p])

         arr1.push_back(p);

}

bool isPrimorialPrime1(long n){

   //如果n不是素数

   //回火

   if (!prime1[n])

      return false;

   long long product1 = 1;

   int i = 0;

   while (product1 < n) {

      product1 = product1 * arr1[i];

      if (product1 + 1 == n || product1 - 1 == n)

         return true;

      i++;

   }

   return false;

}

//驱动程式码

int main(){

   SieveOfEratosthenes1();

   long n = 29;

   //检查n是否为Primorial Prime-

   if (isPrimorialPrime1(n))

      cout << "YES\n";

   else

      cout << "NO\n";

   return 0;

}

输出结果

YES

以上是 在C ++中检查数字是否为Primorial Prime 的全部内容, 来源链接: utcz.com/z/359816.html

回到顶部