代码使用的算法是埃氏筛法,算法理解起来非常简单,原理如下:
首先,列出从 2 开始的所有自然数,构造一个序列:
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,...15, 16, 17, 18, 19, 20, …
取序列的第一个数 2,它一定是素数,然后用 2 把序列的 2 的倍数筛掉:
3, , 5, , 7, , 9, , 11, , 13, , 15...…
不断筛下去,就可以得到所有的素数。...以内的素数:
for n in primes():
if n 1000:
print(n)
else:
break
程序输出如下:
2
3
5...13
17
19
…..
997
注意:filter() 函数返回的是一个 Iterator,也就是一个惰性序列,所以要强迫 filter() 完成计算结果,需要用 list() 函数获得所有结果并返回