解答例_4_10

解答例:練習問題_4_10 ジェネレータ関数 素数                                                                                                                                                                                                                                                                                                                                                                                                                                                                         

次のジェネレータ関数は素数です。引数 n は自然数、戻り値が n 以上の素数を小さい順番に返す関数prime_num_g(n, size = 10) です。n から順番に素数判定を行い、素数が出現したところで yield 文を使用します。繰り返し数が不定なのでここでは while のループ文を使っています。

def prime_num_g(n, size = 10):
    # n 以上の素数を小さい順に戻す
    
    num, cnt = n, 0
    while size - cnt:
        for x in range(2, int(num**0.5)+1):
            if num % x == 0:
                break
        else: # nが素数
            yield num
            cnt += 1
            
        num += 1

以下はfor 文と while 文 + next 関数を使用した確認方法です。

for n in prime_num_g(1000, 5):
    print(n, end=', ')

1009, 1013, 1019, 1021, 1031,

g = prime_num_g(1)

while True:
    try:
        print(next(g), end=', ')
    except StopIteration:
        break

1, 2, 3, 5, 7, 11, 13, 17, 19, 23,

タイトルとURLをコピーしました