使用 Python 檢查給定數字是否為歐幾里得數
假設我們有一個數字 n。我們需要檢查 n 是否為歐幾里得數。眾所周知,歐幾里得數是可以表示為以下形式的整數:
n= Pn+1
其中 是前 n 個素數的乘積。
因此,如果輸入為 n = 211,則輸出將為 True,n 可以表示為:
211=(2×3×5×7)+1
為了解決這個問題,我們將遵循以下步驟:
- MAX := 10000
- primes := 新列表
- 定義一個函式 generate_all_primes()。這將採用
- prime := 大小為 MAX 的列表,並用 True 填充
- x := 2
- 當 x * x < MAX 時,執行以下操作:
- 如果 prime[x] 為 True,則
- 對於從 x * 2 到 MAX 的範圍內的 i(每次增加 x),執行以下操作:
- prime[i] := False
- x := x + 1
- 對於從 x * 2 到 MAX 的範圍內的 i(每次增加 x),執行以下操作:
- 如果 prime[x] 為 True,則
- 對於從 2 到 MAX - 1 的範圍內的 x,執行以下操作:
- 如果 prime[x] 為 true,則
- 將 x 插入 primes 的末尾
- 如果 prime[x] 為 true,則
- 從主方法執行以下操作:
- generate_all_primes()
- mul := 1, i := 0
- 當 mul < n 時,執行以下操作:
- mul := mul * primes[i]
- 如果 mul + 1 與 n 相同,則
- 返回 True
- i := i + 1
- 返回 False
讓我們看看以下實現以更好地理解:
示例程式碼
MAX = 10000 primes = [] def generate_all_primes(): prime = [True] * MAX x = 2 while x * x < MAX : if prime[x] == True: for i in range(x * 2, MAX, x): prime[i] = False x += 1 for x in range(2, MAX): if prime[x]: primes.append(x) def solve(n): generate_all_primes() mul = 1 i = 0 while mul < n : mul = mul * primes[i] if mul + 1 == n: return True i += 1 return False n = 211 print(solve(n))
輸入
211
輸出
True
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP