1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Pythonでアルゴリズムを考える

Last updated at Posted at 2021-04-29

#アルゴリズムの学習

アルゴリズムの学習中に素数を出力するプログラムを作成というものに出会った。
様々な記事にあるようにまずアルゴリズムを文字で書いてみるというのがあったので実践してみた。
私が思い付いたのは以下の通りである。

  1. for文で2~10までを表示するコードを作る(2,3,4,5,6,7,8,9,10)
  2. 素数を表示する式をつくる
  3. if分で素数をを見つけ出す表現をする

このぐらいしか思いつかなかったが、とりあえず思い付いたものを記述した。

Python
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
割り切れる数字があるので素数ではない

解答

Python
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パターンだけでも覚えれたらいいと思った。

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?