筛法的python实现——EOJ 3121

╮ 潜心 ╰ edited 6 年,8 月前

题意:打出一个范围内的所有素数
利用filter实现如下

#构造从3开始的奇数序列
def _odd_iter():
    n = 1
    while True:
        n += 2
        yield n
#定义筛选函数
def _not_divisible(n):
    return lambda x: x%n > 0
#定义一个生成器,不断返回下一个素数
def primes():
    yield 2
    it = _odd_iter()
    while True:
        n = next(it)
        yield n
        it = filter(_not_divisible(n), it)
for n in primes():
    if n > 200:
        break
    if n > 100:
        print(n, end = ' ')

Comments