求素數 Python實現

2021-07-11 03:04:06 字數 1089 閱讀 2295

用filter求素數

計算素數的乙個方法是埃氏篩法,它的演算法理解起來非常簡單:

首先,列出從2開始的所有自然數,構造乙個序列:

2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

取序列的第乙個數2,它一定是素數,然後用2把序列的2的倍數篩掉:

3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

取新序列的第乙個數3,它一定是素數,然後用3把序列的3的倍數篩掉:

5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

取新序列的第乙個數5,然後用5把序列的5的倍數篩掉:

7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...

不斷篩下去,就可以得到所有的素數。

#(1)構造乙個從3開始的奇數序列,是乙個無限序列的生成器

def _odd_order():

n = 1

while true:

n = n + 2

yield n

#(2)定義乙個篩選函式

def _not_divisible(n):

return lambda x : x % n > 0

#(3)定義乙個生成器,不斷返回下乙個素數

def primes():

yield 2

it = _odd_order() #初始序列

while true:

n = next(it) #返回序列的第乙個數

yield n

it = filter(_not_divisible(n),it) #返回新序列

#(4)列印100以內的所有素數

for n in primes():

if n < 100:

print(n)

else:

break

github原始碼

使用Python求素數

素數,只能被1和它自身整除的數 n int input 輸入整數 if n 2 print n,不是素數 for i in range 2,n if n i 0 print 這個數不是素數 break else print 這個數是素數 以上程式在進行判斷時存在乙個邏輯錯誤,當 n i 0 不成立,...

Python求質數 素數

先寫乙個裝飾器d1.py,為了測試執行時間 from functools import wraps import time deff1 func wraps func deff2 begin time.time func end time.time print cost end begin retu...

求素數的高效實現

對於給定的乙個數n,如何判斷其是否是素數呢?最簡單最直觀的方法是試除法 下面的演算法1 2 3 還有一種方法是rabin miller演算法。from 2 to n思路 從2到n 1,做取模運算n mod i 若運算結果均為 0 則 n 為素數 實現 public boolean isprimenu...