Python 判斷一個數是否為素數階乘素數
假設我們有一個數字 n,我們需要檢查 n 是否為素數階乘素數。如果一個數是 pN# + 1 或 pN# – 1 形式的素數,則稱其為素數階乘素數,其中 pN# 表示 pN 的素數階乘,即前 N 個素數的乘積。
因此,如果輸入是 29,則輸出為 True,因為當 N=3 時,29 是 pN - 1 形式的素數階乘素數,素數階乘為 2*3*5 = 30,而 30-1 = 29。
為了解決這個問題,我們將遵循以下步驟:
- MAX := 100000
- prime := 一個大小為 MAX 的列表,並用 True 填充
- arr := 一個新的列表
- 定義一個函式 SieveOfEratosthenes()。它將接收
- for pri in range(2, int(MAX**0.5) + 1):
- if prime[pri] == True:
- for i in range(pri * 2, MAX, pri):
- prime[i] := False
- for i in range(pri * 2, MAX, pri):
- if prime[pri] == True:
- for pri in range(2, MAX):
- if prime[pri]:
- 將 pri 新增到 arr 的末尾
- if prime[pri]:
- 在主方法中,執行以下操作:
- if prime[n] == 0:
- return False
- product := 1, i := 0
- while product < n:
- product := product * arr[i]
- if product + 1 == n or product - 1 == n:
- return True
- i := i + 1
- return 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
廣告