用filter求素數

 

計算素數的一個方法是埃氏篩法,函數

 

全部的奇數:spa

def _odd_iter():
    n = 1
    while True:
        n = n + 2
        yield n

定義一個篩選函數:code

def _not_divisible(n):
    return lambda x : x % n > 0

定義一個篩選器,不斷返回下一個素數:blog

def primes():
    yield 2
    it = _odd_iter()
    while True:
        n = next(it)
        yield n
        it = filter(_not_divisible(n), it)

求1000之內的素數:it

for n in primes():
    if n < 100:
        print(n)
    else:
        break

結果以下:class

 1 2
 2 3
 3 5
 4 7
 5 11
 6 13
 7 17
 8 19
 9 23
10 29
11 31
12 37
13 41
14 43
15 47
16 53
17 59
18 61
19 67
20 71
21 73
22 79
23 83
24 89
25 97​

 

--over--lambda

相關文章
相關標籤/搜索