python印刷素数

2539 ワード

素数を計算する方法の1つは、非常に簡単に理解されているエーストふるい法です.
まず、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から始まる奇数シーケンスを構築することができます(偶数は素数ではありません).
code:
# -*- coding: utf-8 -*-

def main():
    for n in primes():
        if n < 100:
            print(n)
        else:
            break

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

def is_prime(number):
    return lambda x : x % number > 0

def primes():
    yield 2
    iter = odd_iter()
    #print((iter), end = ' ')
    while True:
        number = next(iter)
        #print(number, end = ' ')
        yield number
        iter = filter(is_prime(number), iter)

if __name__ == '__main__':
    main()

参考サイト