利用埃氏筛法求素数
最近在学习廖雪峰老师的Python课程,整理一下埃氏筛法求素数的方法。
- 埃氏筛法
- 首先,列出从2开始的所有整数构成一个序列(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, …)
- 取出序列的第一个元素(2),它一定是素数,然后用这个元素(2)把序列中2的倍数去掉 ,构成新的序列(3,
4, 5,6, 7,8, 9,10, 11,12, 13,14, …) - 重复上述操作,eg:
- 取出新序列的的第一个元素(3),它一定是素数,然后用这个元素(3)把序列中3的倍数去掉,构成新的序列(5,7,
9,11,13,…) - 取出新序列的第一个元素(5),它一定是素数,然后用这个元素(5)把序列中5的倍数去掉,构成新的序列…
- 不断筛选下去就可以得到所有的素数
- Python的实现
#构造一个从3开始的奇数序列 def init(): n=3 while True: yield n n+=2 #定义一个筛选函数: def select(n): return lambda x:x%n>0 #最后定义一个生成器,不断返回下一个素数: def primes(): yield 2 m=init() while True: n=next(m) yield n m=filter(select(n),m) for n in primes(): if n<100: print(n,end=' ') else: break