在Python中检查数字是否为Primorial Prime

假设我们有一个数字n,我们必须检查n是否为原始质数。当数字是形式为pN#+1或pN#– 1的质数时,该数字被称为本质质数,其中pN#表示pN的质数,使得前N个质数为乘积。

因此,如果输入像29,则输出将为True,因为29是形式为pN-1的Primorial素数,如果N = 3,Primorial是2 * 3 * 5 = 30且30-1 = 29。

为了解决这个问题,我们将遵循以下步骤-

  • 最大:= 100000

  • prime:=大小为MAX并填充True的列表

  • arr:=一个新列表

  • 定义一个功能SieveOfEratosthenes()。这将需要

  • 对于pri范围2到int((MAX)的平方根)+ 1,

    • 对于pri * 2至MAX范围内的i,按pri的每一步进行更新,执行

    • prime [i]:= False

    • 如果prime [pri]与True相同,则

    • 对于pri在2到MAX范围内,请执行

      • 在arr的末尾插入pri

      • 如果prime [pri]不为零,则

    • 从主要方法中,执行以下操作-

    • 如果prime [n]为零,则

      • 返回False

    • 产品:= 1,i:= 0

    • 当积<n时,做

      • 返回True

      • 产品:=产品* arr [i]

      • 如果乘积+1与n相同或乘积-1与n相同,则

      • 我:=我+ 1

    • 返回False

    示例

    让我们看下面的实现以更好地理解-

    from math import sqrt
    MAX = 100000
    prime = [True] * MAX
    arr = []
    def SieveOfEratosthenes() :
       for pri in range(2, int(sqrt(MAX)) + 1) :
          if prime[pri] == True :
             for i in range(pri * 2 , MAX, pri) :
                prime[i] = False
       for pri in range(2, MAX) :
          if prime[pri] :
             arr.append(pri)
    def check_primorial_prime(n) :
       if not prime[n] :
          return False
       product, i = 1, 0
       while product < n :
          product *= arr[i]
          if product + 1 == n or product - 1 == n :
             return True
          i += 1
       return False
    SieveOfEratosthenes()
    n = 29
    print(check_primorial_prime(n))

    输入值

    29

    输出结果

    True