Python
Python3

Python3で素数の無限ジェネレータ

More than 1 year has passed since last update.

先日次のような記事を書きました: 「Pythonで素数列挙と素数判定」。これを公開したのち、ふと「素数の無限ジェネレータ」をPython3を作ったので、Qiitaに公開しておきます(実用性には乏しいと思いますが……)

ポイントはitertools.countfunctools.partialあたりでしょうか。前者は整数の無限ストリームを作り、後者はメソッド(関数)に対する部分適用を実現しています。


import itertools, functools, math

def prime_stream():
stream = itertools.count(2)
sieve = lambda x, y: x % y != 0

while True:
prime = next(stream)
stream = filter(functools.partial(sieve, y=prime), stream)
yield prime

if __name__ == '__main__':
primes = prime_stream()
for _ in range(20): print(next(primes))

# 2
# 3
# 5
# 7
# 11
# 13
# 17
# 19
# 23
# 29
# 31
# 37
# 41
# 43
# 47
# 53
# 59
# 61
# 67
# 71