python实现素数筛选
2015-11-15 13:24
696 查看
计算素数的一个方法是埃氏筛法,它的算法理解起来非常简单:
首先,列出从
2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...
取序列的第一个数
3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...
取新序列的第一个数
5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...
取新序列的第一个数
7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...
不断筛下去,就可以得到所有的素数。
首先,列出从
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
相关文章推荐
- 《用Python玩转数据》学习笔记第3周Part1
- Python学习笔记008_类_对象_继承_组合_类相关的BIF
- [问与答]Python 中 __all__ 的作用 ?
- [问与答]Python 中 __all__ 的作用 ?
- Python logging模块使用记录
- python 11期 第三天
- Python多进程并发操作中进程池Pool的应用
- Python 文档风格
- Python学习笔记007_图形用户界面(EasyGui)
- Eclipse python 插件 离线安装
- 第一个python程序hello.py
- 5. 数据类型库
- Python学习笔记006_异常_else_with
- Python3.5安装numpy,SciPy后,出现ImportError
- sublime Text文本编辑器在python环境下控制台输不出中文
- python中 可变与不可变对象
- 10 种机器学习算法的要点(附 Python 和 R 代码)
- Python_元组、字典内建方法详解
- Python进阶09 动态类型
- Python的参数传递