#アルゴリズムの学習
アルゴリズムの学習中に素数を出力するプログラムを作成というものに出会った。
様々な記事にあるようにまずアルゴリズムを文字で書いてみるというのがあったので実践してみた。
私が思い付いたのは以下の通りである。
- for文で2~10までを表示するコードを作る(2,3,4,5,6,7,8,9,10)
- 素数を表示する式をつくる
- if分で素数をを見つけ出す表現をする
このぐらいしか思いつかなかったが、とりあえず思い付いたものを記述した。
for i in range(1, 11):
print(i)
ここまでしか書けなかった。
2と3を考えて素数とはなんぞやと考え、1と自分自身意外に約数を持たない自然数で、1ではない数とあったので、
コードっぽく書いてみたが、
n / 1 == 0 and n / n == 0(これしか思いつかなかった上に全然違う)
ここでギブアップして解説を漁った。
素数
素数に対する考え方として、例えば10のとき
・2,3,4,5,6,7,8,9,で割り算した時のあまりをチェックして、もし1つでもあまりが0となっていれば、割り切れているので、素数ではない。
・全てあまりが0でなければ、素数であると言える。
-例-
4 % 2 = 0
4 % 3 = 1
割り切れる数字あるので素数ではない
5 % 2 = 1
5 % 3 = 2
5 % 4 = 3
割り切れる数字がないので素数
10 % 2 = 0
10 % 3 = 1
10 % 4 = 2
10 % 5 = 0
10 % 6 = 4
10 % 7 = 3
10 % 8 = 2
10 % 9 = 1
割り切れる数字があるので素数ではない
解答
numbers = [] # ⇦素数を出力するために空のリストを作成
for i in range(2, 11): # ⇦(2~10までの数字が順番で出てくる)
flag = True
for j in range(2, i): # ⇦(ここで2~9までの数字が出てくるつまり %2や%3の部分)
if i % j == 0: # ⇦(ここで実際に 10 % 2や 10 % 3を行っている)
flag = False
if flag == True:
numbers.append(i) # ⇦(ここで素数が成り立っていたら、numbersの中に素数が1個づつ加わる)
print(numbers)
#感想
今回は素数に対する考え方が理解できたので、解答で出てきたコードを見ても理解することができた。
アルゴリズムの問題を見ているとコード自体は難しくないのに別のところで引っかかって前に進めないことが多く感じた。(今回だと素数に対する考え方)
この方法が正しいのかわからないが少しずつパターン化してみて、1日1パターンだけでも覚えれたらいいと思った。