把廖雪峰**的描述稍微修改了一下:
計算素數的乙個方法是埃式篩法,它的演算法理解起來非常簡單:
首先,構造出乙個奇數序列:
3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25...
先返回2
取序列的第乙個數3
,它一定是素數,返回3,然後用3
把序列的3
的倍數篩掉:
5, 7, 11, 13, 17, 19, 23, 25, ...
取新序列的第乙個數5
,返回5,然後用5
把序列的5
的倍數篩掉:
7, 11, 13, 17, 19, 23, ...
不斷篩下去,就可以得到所有的素數
def is_odd():
n = 1
while true:
n += 2
yield n
def not_divisible(n):
return lambda x: x % n > 0 #lambda相當於乙個簡潔的函式,其中x是引數
def is_prime():
yield 2
l = is_odd()
while true:
n = next(l)
yield n
l = filter(not_divisible(n), l) #n傳進去的n相當於函式體內的x值
for x in is_prime():
if x < 100:
print(x)
else:
break
詳解利用filter函式求解素數 埃氏篩選
filter函式 篩選函式 有兩個引數,第乙個引數是乙個函式,第二個函式是乙個序列。把函式依次作用於序列的元素,根據返回值判斷保留還是丟棄這個元素。filter函式最後返回的是乙個filter物件 迭代器物件 計算素數的乙個方法就是埃氏篩法,它的演算法理解起來非常簡單 首先,列出從2開始的所有自然數...
埃式篩選法
題目 給定整數n,請問n以內有多少個素數?n 1e6 樣例輸入1 11輸出 5樣例輸入2 1000000 輸出78498 演算法詳解 i從2開始遍歷,2肯定是素數那麼他的倍數肯定不是素數,標記下來,然後遍歷沒被標記的數。遍歷完所有就只剩下沒被標記的素數了。參考 include include usi...
埃氏篩法 素數的快速篩選
埃氏篩法的的核心是 素數的倍數都不是素數。那我們執行這樣乙個策略,我們可以確定的是 2 是最小的素數,建立乙個表並將除了 0 1 外的所有數標記為素數,我們將篩選範圍內的 2 的倍數全部標記為合數 非素數 然後取出表中最小的素數,執行相同的策略 講素數的倍數標記為非素數 下圖可以完美的演示這樣乙個演...