プログラ生活

プログラム初学者のためのポイントを書いていこうと思います。たまに脇道それた記事もありますが、息抜きだとおもって気長にお付き合いください。

【数学】素数の話(Python付) -3-

www.pon-x.jp

www.pon-x.jp

前回まで素数の必要性を話していきましたが、そうしたらどうやって素数ってみつけていくのっていう話です。

素数とは、1より大きい自然数で、さらに約数がその数自身と1の2つしかないという数のことでしたよね。
では、素数を探す手順を紹介します。

2以外は奇数だけを考える。

1は約数が1つしかないので、2以上を考えるのですが、偶数は絶対に2を約数にもつので、2以外は奇数だけを考えます。

奇数の約数は奇数しかない

奇数の約数に偶数をもつことはないので、奇数の約数が存在するかを確認していけばよいのです。

その数の半分の数まで探せばよい。

例えば、69は素数かどうかを考えるとき、1と67以外に約数を持つかということを考えます。
小さい順から考えると、 $69 \div 2 = 34 \mbox{余り1}$ ・・・ 2は約数でない
$69 \div 3 = 23$ ・・・ 3は約数である。



ということがわかります。
ここで、3が約数ということであれば、23も約数であるということがわかります。
つまり69の半数までかぞえれば、残りの半数に約数が存在するか否かは断定できるのです。

コードにしてみる

def sosu(num):
    
    if num < 2:
        # 2以上の自然数対象
        return False
    
    elif num == 2:
        # 2は素数
        return True

    elif num % 2 == 0:
        # 2以外の偶数は素数でない
        return False

    else:
        # 奇数は1とその数と自身以外に約数があれば約数でない
        for i in range(3, num // 2, 2):
            if num % i == 0:
                return False
        else:
            return True



# 100未満の素数を探索する
for i in range(100):
    if sosu(i):
        print(i)

->
2   
3   
5   
7   
11   
13   
17   
19   
23   
29   
31   
37   
41   
43   
47   
53   
59   
61   
67   
71   
73   
79   
83   
89   
97   

→