用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...