歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Python實現篩選法求素數

Python實現篩選法求素數

日期:2017/3/1 9:16:24   编辑:Linux編程

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

首先,列出從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, ...

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

# 構造一個從3開始的奇數序列
def _odd_iter():
n = 1
while True:
n += 2
yield n


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


def primes():
yield 2
it = _odd_iter()

while True:
n = next(it)
yield n
it = filter(_not_visible(n), it)


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

Copyright © Linux教程網 All Rights Reserved