読者です 読者をやめる 読者になる 読者になる

CodeKata第二問 : 素数判定 @Python3.4

今日は素数判定ということで、与えられた数字が素数かどうかを判定するプログラムを作って行きたいと思います。

例によって、いい書き方があれば教えてください。m(_ _)m

 

問題

与えられた数が素数であるかどうかを調べなさい。

また、与えられた数までの素数を列挙しなさい。

 

 

考え方

まず素数の定義は「1と対象となる数以外には約数がない正の整数」です。

ちなみに「1」は素数ではありません。

この時点で、「負の整数」、「0」、「1」、「2以外の偶数」は素数となりえません。

よって、上記の数が入力された場合は「素数ではない」と判断します。

上記以外の整数nに関しては、nを2~(n-1)までの数で順に割っていって、あまりが0になるパターンがあれば「素数ではない」、なければ「素数」というように判断していきます。

 

 

コード


def prime_num(n):
    #n=2であったら「素数」
    if n == 2:
        return True
        
    #nが2より小さい or 偶数であれば「素数ではない」
    if (n < 2) or (n % 2 == 0):
        return False
        
    #nを2~(n-1)までの数で割り、あまりが0となるパターンがあれば「素数ではない」
    for i in range(2,n):
        if n % i == 0:
            return False
    #「if n % i == 0:」に引っかからずfor文が終われば「素数」
    return True

if __name__ == "__main__":
    for n in range(101):            #1〜100までの数を素数判定する
        print("{} {}".format(n,prime_num(n)))

 

解説

引数に取った数が素数であればTrue、素数でなければFalseを返す関数を作成しました。

1〜100までの数を素数判定し、順に出力していくコードはmainに記述しました。

今回は、考え方で書いた内容をそのままコードに起こした、という感じです。

ただ、偶数を判定するときに2を除外しておかないと、2をFalse と判定してしまうため、2のみ一番初めにif文で判定するようにしています。

あとは特筆すべきところは特にない気がします。

 

今回使用した要素


>>>"hello {}".format("world")   #文字列の中の{}に引数に取った値を代入する
'hello world'

>>>for i in range(5):
...    "{}".format(i)
...
'0'
'1'
'2'
'3'
'4'