素数筛实现素数的快速筛选

# usr/bin/env python
# _*_ coding:utf-8 _*_

'''
素数筛(Sieve of primes):给定一个较大值n,寻找1~n中的所有素数,并把它打印出来。

判断一个数m是否是素数,需要花费O(√n)时间。
当然是遍历并判断的话,需要花费O(n√n)时间,
生产者实现也很简单:
1. 首先生成一个bool列表表示该index的数是否是素数;
2. 显然0,1不是素数;
3. 接下来判断2<=i<=n的数,
   如果为素数(True),则yield抛出,并把i的2倍,3倍,…,(n-1)/i+1倍都设为不是素数(False)。
这就是素数筛的原理,花费时间为O(n).
'''

def prime_sieve(n):
    flags = [True] * n
    flags[0] = flags[1] = False

    for i in xrange(2, n):
        if flags[i]:
            yield i

            for j in xrange(2, (n - 1) / i + 1):
                flags[i * j] = False

if __name__ == '__main__':
    n = input()
    sieves = prime_sieve(n)
    for sieve in sieves:
        print sieve

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值