遵循埃氏筛法的思想,使用filter函数和生成器生成给定自然数内的质数(又称素数)列表。
本文章总结自廖大的python教程。
1. 首先直接生成奇数列表,因为2作为最小的质数,显然所有大于2的偶数都将被排除。
def odd_generator():
n = 1
while True:
n += 2
yield n
2. 生成筛选函数。
def not_divisible(n):
return lambda x: x % n > 0
注意,此函数返回的是一个匿名函数,而不是某个具体的值。单独调用此函数的正确方式是 not_divisible(2)(10),返回False。
3. 生成质数生成器。
def primes():
n = 2
it = odd_generator()
while True:
n = next(it)
yield n
it = filter(not_divisible(n), it)
4. 在给定自然数范围内生成质数列表。
for n in primes():
if n < 1000:
print(n)
else:
break