プログラミング

【Python】素数判定|ソースコード付きで解説

Python

今回はPythonの素数判定について見ていきましょう。

 

入力した任意の数が素数であるか?

数字以外を入力された時の処理はどうするのか?

入力した任意の数までに含まれる素数の数はいくつか?

繰り返し入力をして素数判定をするにはどうしたらいいのか?

と言った疑問に応えていきます。

【Python】入力した値の素数判定

こんな感じです。

簡単ですねwww

Pythonはインデント(字下げ)命ですので十分に注意してください。

一応Python初心者の方に向けて解説します。

素数であるかどうかの判別法

素数であるかどうかの判別法はflagに格納する値によって判断します。

  • 素数である:flag=True
  • 素数でない:flag=False

入力した値を数値処理できる型に変換

入力した値を格納する為に変数nを用います。

まず素数判定したい値を入力させるわけですが、str(文字列)型のままでは数値処理が出来ません。

n=input(“値を入力してください”)←このままではダメ!

 

なのでint(整数)型に変換しなくてはなりません。

n=int(input(“値を入力してください”))←こっちが正解!

素数判定処理のメインプログラム

素数判定したい値が決定したらいよいよ素数判定(メイン)です。

とは言っても短いコードで至極簡単なんですけどねw

わたくし
わたくし
これくらい余裕だぜ!
Mur
Mur
そうだよっ!!

そもそも素数とは1とその値自身しか約数を持たない正の整数でしたよね。

なので以下のように考えます。

 

素数判定したい値 において2~(n-1)間n の約数の有無を確認します。

 

まず、2~(n-1)間を繰り返す(ループ)するコードは以下になります。

for i in range(2,n)

もう一度確認しておきます。

(2,n)と範囲指定することで2~(n-1)までを繰り返し処理することが出来ます。

 

また forin の間に i がありますよね。

i はループ処理する為の変数です。

i=2 (初期値)

i=i+1 (i=3)

i=i+1 (i=4)

 ・

 ・

 ・ <n-1回目までループは続く>

i=i+1  (i=n-1)

この様に値が1ループ毎に更新されていきます。

 

 i の値がループ処理で更新されていくと同時に、 ni で割った余りがいくらになるのかを確認します。

条件分岐 (if)と合わせて、あまりが 0 になる場合を考えます。

つまり、こうだっ!!

if n%i==0 (もしnをiで割った余りが0ならば)

余りが0になった場合、素数ではありませんflag=False)となる。


素数判定の結果を表示する

素数判定用の変数(flag)を条件分岐に掛けて結果表示をします。

if flag==True(素数であるなら)

if flag==False (素数でないなら)

 

文字や数字を表示する為には print関数 を使うことは知っていますよね?

今回は “(入力した値n)は素数~~~” と表示したいのでformat(代入したい値)を使いました。

“文字列{代入先}”.formar(代入したい値)

ソースコードの様に値の代入先を鍵括弧{} で指定して、値nを代入したいので .format(n)でnを代入。

 

上記の事が分からない!!少し詳しく知りたいっ!と思った方は以下の書籍の購入を検討してみて下さい。

Python初心者にとって見やすいデザインで分かりやすい説明となっています。

Python初学者にこれ以上ない優しい参考書です。

【Python】素数判定で数字以外が入力された時の処理について

さっきから気付いている人も居ると思います。

Mur
Mur
あれっ?数字以外が入力された時どうなるんだ??
わたくし
わたくし
良いところに気づいたな!これから勉強スッゾ

数字を入力してくれないとやばぁ~いです。

数字でもない値を int(整数)型に変換しようとしたらエラーが出てしまいます。

※因みに全角数字も通常 int型 でないので注意です。

 

n=”moji”が格納されている時:n=int(n)←エラー!!プログラム強制終了(中断)

このエラーを解決しない限り素数判定は出来ません!

 

そこで以下の様にコードを付け加えます。

 

あくまでも素数判定プログラムの核ではないんですけどね・・・

要は入力(input)した値を素数判定できるように弄ることなんですよね。

数字ではなく文字などの例外が有ることですし。

 

さぁ、ここで付け足したコードは例外処理(try except)です。

詳しくはnote.mknk.meさんの記事から

 

わたくしの知識が乏しいもので上手くは説明できる訳ではありませんが、一応ね・・・説明は書いてみます。

通常正しくないコードが有るとプログラムが強制終了(中断)してしまう。

しかし、例外処理(try,except)を使用することで正しくないコードが有ったとしても処理を継続する。

勿論、この時もインデントに注意してください。

 

いずれにせよ、例外処理を想定したコードを付け加えたことで正しく素数判定を行うことが出来るようになりました。

変数に格納された値の型を調べる

変数 n に格納された値が整数型(int)文字列型(str)そ調べたい時はtype関数を使用します。

  • type(調べたい変数または値)

例を紹介します。

1)n=”moji”の時・・・type(n)=str

2)n=10の時・・・type(n)=int

Python学習サイトPyQ

╲Python学習者必見╱

入力した任意の数までに含まれる素数の数を求める

「任意の数までに含まれる素数の数??」って思いました?

例えば、input()で整数8が入力された時:1~8までに含まれる素数は{2,3,5,7}の4つです。

こんな感じですね(-ω-)/

 

それでは、ソースコードを見ていきましょう。

こんな感じです。

二重ループによる処理

二重ループで条件分岐を繰り返さなければ求められないんですよねぇ~

二重ループでどのような処理をしているのかと言うと以下の表の様になっています。

二重ループの処理iの要素を縦、jの要素を横

 

例えば n=10 の時、1~10までに含まれる素数の数は{2,3,5,7}の4つとなりますよね。

これ以上の説明はあえて省きます(~_~メ)

自分なりに図や表を書いてみて考えると分かりやすいと思います。

【Python】素数判定を任意の回数繰り返す

素数判定を一回して終わり・・・なんてプログラムは何回か連続して調べたい時に面倒ですよね。

そこで任意の回数分をループできるようにコードを付けたし書き換えます。

入力の値が空白であるときにループを抜けだし終了する仕様です。

 

また、今までの紹介した機能をひっくるめたプログラムとしてみましょう。

 

ループ(while)文が増えて理解が追い付かないかもしれませんね。

慣れない間は本当に分からないものです。

 

ループの命令をしたら繰り返し処理のスタート地点とゴール地点があります。

わたくし
わたくし
当然だなっ

当たり前の事でありますが、しっかり把握していなければ上手くいきません。

【Python】まとめ

今回はPythonで素数判定をするプログラムを書きました。

この記事の内容で分からない箇所があったなら、プロゲート(progate)を利用したり参考書を調達して学習してください。

Pythonにしろ他のプログラミング言語にしろ基礎が身について居ないと後になって苦労します。

お互い頑張りましょう(-ω-)/!!

人気ブログランキング
関連記事