機械系エンジニアの備忘録

20代独身社会人。仕事では機械・機構の研究開発を行っているエンジニアが、自分の専門分野ではないpythonを扱って楽しむブログです。

MENU

【python】【初心者】簡単な数値計算の問題part2

python素数を判定するプログラムを作ってみる

 

1. はじめに

この記事は「pythonを初めて何をすれば良いかわからない」,「とりあえず初心者本を読んでちょっと理解したけど自力では書けない」という方向けに書いています。

↓前の記事

www.stjun.com

 

2. 問題

2.1 問題

pythonを使って,任意の数字が素数かどうか判定するプログラムを作りましょう。

ちなみに素数とは「1とそれ自身でしか割れない数」のことを言います。

例えば3は「1と3」の2つでしか割れないので素数です。

11はどうでしょうか?11も「1と11」でしか割れないので素数です。

それでは132はどうでしょうか?132は「1,2,3,4,6,11,12,22,33,44,66,132」で割れるので素数ではありません。

 

2.2 まずはノーヒントで

1653231が素数がどうかプログラムを作って判定してみて下さい。

ちなみに1653231は素数ではありませんので、素数でないと判定されたらOKです。

 

2.3 アルゴリズムのヒント

例えば121が素数かどうか判定したいとします。

まず1は必ず割れるので,2で割れるか考えてみましょう。121÷2=60.5なので割れませんね。

それでは2の次の3はどうでしょうか?121÷3=40.333...となるので割れませんね。

それでは3の次の4はどうでしょうか?...といった風に2から120まで1づつ順番に割れるかどうか繰り返し判定していけば良いことになります。

それでは引き続きやってみましょう。

 

2.4 さらにヒント

「2.アルゴリズムのヒント」で出てきた「繰り返し」と「判定」はpythonでどうやれば良いでしょうか?

答えは「繰り返し」はfor文、「判定」はif文です。

● for文の書き方

for i in (繰り返し数):

    やりたい処理A~

です。例えば,0~9まで1つずつ表示させた時は次のように書けます。

f:id:stjun:20190605230711p:plain

今回,2から121(判定したい数)まで1つずつ増加させていくとしたら,例えば以下のように書けます。

f:id:stjun:20190605231008p:plain

 

● if文の書き方

if 条件:

    やりたい処理A~

例えば,100を2で割れたら「割れました」,割れなかったら「割れませんでした」というプログラムは以下のように書けます。

f:id:stjun:20190605231359p:plain

ここでx%2は「xを2で割った時の余り」を表しています。

x=100なので100÷2=50で余りは0です。そのためx%2=0になります。

そのため「割れました」と表示されます。

 

また割れた数を数えるためにリストを使ってみましょう。例えば30をいくつの数字で割れるでしょうか?答えな次のプログラムになります。

f:id:stjun:20190605232924p:plain

30は「1、2、3,5、6、10、15、30」の8つで割れるので確かに当たっていますね。

上のプログラムではx_sum=list()でx_sumという名前の空のリストを作り,
if x%(i+1)==0:
    x_sum.append(1)
    print(i+1)

で割り切れたらリストに1を入れています。

そして最終的にリストに1がいくつ入っているかをlen(x_sum)で取得しています。

素数は「1とそれ自身でしか割れない数」なので割れる数は必ず2ですね、それならばリストの長さが2なら素数、2より大きければ素数じゃないとすれば.....

以上,このfor文とif文を使って2から判定したい数まで1つずつ判定していけば良いことになります。

 

3. 回答例

f:id:stjun:20190605233351p:plain

 

4. まとめ

どうでしたか?if文やfor文を使うことで様々なプログラムを作ることができます。

↓次の記事

www.stjun.com