用Python3生成质数列表

遵循埃氏筛法的思想,使用filter函数和生成器生成给定自然数内的质数(又称素数)列表。

本文章总结自廖大的python教程。

 

1. 首先直接生成奇数列表,因为2作为最小的质数,显然所有大于2的偶数都将被排除。

def odd_generator():
    n = 1
    while True:
        n += 2
        yield n

 

2. 生成筛选函数。

def not_divisible(n):
    return lambda x: x % n > 0

注意,此函数返回的是一个匿名函数,而不是某个具体的值。单独调用此函数的正确方式是 not_divisible(2)(10),返回False。

 

3. 生成质数生成器。

def primes():
    n = 2
    it = odd_generator()

    while True:
        n = next(it)
        yield n
        it = filter(not_divisible(n), it)

 

4. 在给定自然数范围内生成质数列表。

for n in primes():
    if n < 1000:
        print(n)
    else:
        break

 

你可能感兴趣的:(python)