KNIMEとか倉庫

KNIMEやEXCELなどの備忘録です。

【Python】引数までの素数を算出する関数を作りたい

・お題:引数までの素数をリスト形式で出力する関数を作成したい。

 

・エラトステネスの篩のアルゴリズムを参考にしてみる。

ja.wikipedia.org

・2から指定の数までの自然数のリストを作成し、そこから素数でないもの(割り切れてしまったもの)を除外することを考える。

①とりあえず目標値を10に設定して、2から10までのリストを作成した。

a=list(range(2,1+10))

aの中身は[2, 3, 4, 5, 6, 7, 8, 9, 10]

②次に、ここから2で割り切れるもの、3で割り切れるもの、、、、10で割り切れるものを除外していく。ただし、単純にそれぞれの数で割り切れるものを除外すると、素数(2や3)も除外されてしまう。割り算したときの、商が1より大きく、余りがゼロのものを除外する必要がある。

pythonで商を求める演算子は//、余りを求める演算子は%らしい、

また、この条件を満たすようにすると、(商>1 and 余り==0)と設定することになりそう。

for文を使って、割る数をaからピックアップし、条件を適用する感じにしてみる。

for i in a:
        a=[j for j in a if not (j // i >1 and j % i ==0)]

ざっくりこんな感じで実行すると、aの中身が

[2, 3, 5, 7]

になった。

③これらを踏まえて、関数を作成してみた。なんとなく、引数のデフォルトは10にした。

def Sosu(n=10):
    a=list(range(2,1+n))
    for i in a:
        a=[j for j in a if not (j % i ==0 and j // i >1)]
    return a

これを実行してから、

Sosu(20)

と入力すると、

[2, 3, 5, 7, 11, 13, 17, 19]

と出てきた。

なんだかできたっぽい。

 

おわり。