プログラミングを学ぼうと思った時、「条件分岐」と「繰り返し」について学ぶのは基本中の基本です。そこで、素数判定を行うプログラムを作って、プログラミングの基礎を学びましょう。日本語プログラミング言語「なでしこ」で楽しく基本をマスターしましょう。
なでしこで「繰り返し」と「条件分岐」はどう書く?
「条件分岐」と「繰り返し」は、プログラミングにおける最も重要な概念です。なでしこでは、このために「もし」構文と「繰り返す」構文を使います。
今回目的とする「素数判定」のプログラムを作る前に、まずは「もし」構文と「繰り返す」構文の使い方を確認しておきましょう。
「もし」構文の使い方
まずは、条件分岐から見ていきましょう。なでしこで処理の分岐を行うには「もし」構文を使います。次のように書きます。
# 【書式】「もし」構文
もし、(条件式)ならば
# ここに条件が真のときの処理
違えば
# ここに条件が偽のときの処理
ここまで
図にすると次のようになるでしょう。条件式を確認して、条件が真(つまり正しい)ときには、真のときの処理のブロックを実行し、条件が偽(つまり正しくない)ときには偽のときの処理のブロックを実行します。なお、「もし」構文の「違えば」以降の部分は省略することもできます。
例えば、変数Nが3より大きいかどうかを調べるプログラムでは次のように書きます。実際に、なでしこ簡易エディタを開いて、以下のプログラムを入力してみてください。
変数Nに5を代入。
もし、変数N > 3ならば
「変数Nは5より大きい」と表示。
違えば
「変数Nは5以下」と表示。
ここまで。
画面下の「実行」ボタンを押すとプログラムがすぐに実行されます。変数Nは5なので、3より大きいので「変数Nは5より大きい」と表示されます。
次に、上記のプログラムの1行目を「変数Nに1を代入」と書き換えて実行してみましょう。すると、「変数Nは5以下」と表示されます。このようにプログラムの学習では、プログラムを書き換えてみて、どうのように表示結果が変わるかを確かめていくと、理解が深まります。
「繰り返す」構文の使い方
次に「繰り返す」構文の使い方を確認してみましょう。なでしこで繰り返しを行うには、次のように書きます。
# 【書式】「繰り返す」構文
Nを1から10まで繰り返す
# ここに繰り返す処理
ここまで。
図で動作を確認してみましょう。以下は変数Nを指定して、1から10まで繰り返す処理を示したものです。変数Nの値を1,2,3,4,5…10と変更しながら繰り返し10回、繰り返し処理のブロックを実行します。
例えば、次のプログラムを実行して結果を確認してみましょう。
変数Nを1から5まで繰り返す
「変数N = {変数N}」を表示。
ここまで。
同じように、なでしこ簡易エディタで上記のプログラムを実行してみましょう。すると、1から5までの間繰り返し実行しているのを確認できます。なお、「…{変数N}…」のように書くと、文字列の中に変数Nの値を埋め込んで表示することができます。
1から10までの中で偶数だけを表示
素数判定の前に簡単な練習問題を解いてみましょう。1から10までの中で偶数だけを画面に表示するプログラムを作ってみましょう。次のようなプログラムになります。
Nを1から10まで繰り返す
もし、(N % 2) = 0ならば
「{N}は偶数」と表示
ここまで
ここまで。
プログラムを実行すると、次のように表示されます。
プログラムを確認してみましょう。ポイントとなるのは、偶数判定を行っている2行目の部分です。
「N % M」のように書くと、NをMで割った時の余りを求めることができます。例えば、Nが4でMが2であれば、割り切れるので余りは0になりますし、Nが4でMが1であれば割り切れず余りは1になります。
それで、偶数というのは、2で割って余りが0になるものなので、上記のようなプログラムを作ることで偶数だけを画面に出力できるというわけです。
素数判定のプログラムを作ってみよう
それでは、いよいよ「素数判定」を行うプログラムを作ってみましょう。そもそも、素数とはどんな数でしょうか。素数とは次のような性質を持つ数のことです。
素数とは1より大きい自然数のうち、1とその数でしか割り切れないもの。
つまり、素数判定のプログラムを作るには、次のような処理を記述します。判定したい数をNとするとき、次のようにします。
- (1) 変数Mについて、2から(N-1)まで手順(2)と(3)の処理を繰り返す
- (2) NがMで割り切れるか判定
- (3) 割り切れるなら、素数でないことが分かる
- (4) 上記いずれの数でも割り切れなければ、素数であることが分かる
# 判定したい数を以下に指定 --- (*1)
N = 13
# 素数判定を行うプログラム --- (*2)
結果=「素数である」
Mを2から(N - 1)まで繰り返す
もし、(N % M) = 0ならば # --- (*3)
結果=「素数ではない」
抜ける。
ここまで。
ここまで。
「{N}は{結果}」を表示。# --- (*4)
なでしこ簡易エディタで確かめてみてましょう。上記のプログラムを貼り付けて「実行」ボタンを押してみましょう。結果が表示されます。
ここでは、変数Nが13のときの判定結果を表示します。13は1とその数以外では割り切れないので「素数である」と判定結果が表示されます。プログラムの2行目にある「N = 13」の部分を「N = 12」とか「N = 7」とか、いろいろ変更して結果を確かめて見ましょう。
続いて、プログラムを確認してみましょう。上記プログラムの(*1)では変数Nの値を設定します。この値を書き換えることで、任意の数が素数かどうかを判定します。
プログラムの(*2)以降では「繰り返す」構文を使って繰り返し変数NがMで割れるかを調べます。
(*3)の部分で、NがMで割り切れるかどうかを調べます。それで、NがMで割り切れた場合、変数「結果」を「素数ではない」と代入して、「抜ける」文で繰り返しを終了します。「繰り返す」文の中で「抜ける」文を書くと、そこで繰り返しを強制的に終了して対応する「ここまで」に処理を移します。
そして、最後の(*4)の部分では、値が素数かどうかの結果を表示します。
まとめ
以上、今回は、プログラミングの基本に戻って、「分岐」と「繰り返し」について考えてみました。この基本が分かっていれば、素数判定のような、それなりに複雑なプログラムも作ることができます。
なお、素数判定にはもっとスマートな書き方もできるのですが、今回は基本の基本という事で、もっとも単純なプログラムを紹介しました。より効率的に素数判定を行う方法もありますので、工夫して改良してみると良いでしょう。
自由型プログラマー。くじらはんどにて、プログラミングの楽しさを伝える活動をしている。代表作に、日本語プログラミング言語「なでしこ」 、テキスト音楽「サクラ」など。2001年オンラインソフト大賞入賞、2004年度未踏ユース スーパークリエータ認定、2010年 OSS貢献者章受賞。技術書も多く執筆している。直近では、「シゴトがはかどる Python自動処理の教科書(マイナビ出版)」「すぐに使える!業務で実践できる! PythonによるAI・機械学習・深層学習アプリのつくり方 TensorFlow2対応(ソシム)」「マンガでざっくり学ぶPython(マイナビ出版)」など。