素数を表示してみる(チューニング)
元のコード
- #100までの数を、一時保存できる変数(NaturalNumber)を用意する
- NaturalNumber = []
- #100までの素数を、一時保存できる変数(PrimeNumber)を用意する
- PrimeNumber = []
- #反復処理の回数を、一時保存できる変数(Counter)を用意する
- Counter = 0
- #変数(Counter)に1を代入する
- Counter = 1
- #変数(Counter)が100になるまで、以下の処理を繰り返す
- while Counter <= 100:
- #変数(NaturalNumber)に、変数(Counter)の値を代入する
- NaturalNumber.append(Counter)
- #変数(Counter)の値に1を足す
- #変数(Counter)に変数(Counter)の値を代入する
- Counter = Counter + 1
- #反復処理の回数を、一時保存できる変数(Counter2)を用意する
- Counter2 = 0
- #変数(Counter)に1を代入する
- Counter = 0
- #変数(Counter)が100になるまで、以下の処理を繰り返す
- while Counter < 100:
- #変数(Counter2)に2を代入する
- Counter2 = 2
- #変数(Counter2)が(NaturalNumber@Counter)未満の間、以下の処理を繰り返す
- while Counter2 < NaturalNumber[Counter]:
- #変数(NaturalNumber@Counter)を変数(Counter2)で割った余りを出す
- #余りが0なら
- if NaturalNumber[Counter] % Counter2 == 0 :
- #breakする
- break
- #余りが0以外なら
- else :
- #変数(Counter2)の値に1を足す
- #変数(Counter2)に変数(Counter2)の値を代入する
- Counter2 = Counter2 + 1
- #breakしなかったら
- else :
- #変数(PrimeNumber)に代入する
- PrimeNumber.append(NaturalNumber[Counter])
- #変数(Counter)の値に1を足す
- #変数(Counter)に変数(Counter)の値を代入する
- Counter = Counter + 1
- #変数(PrimeNumber)を表示する
- print (PrimeNumber)
改善後のソース
- #100までの素数を、一時保存できる変数(PrimeNumber)を用意する
- PrimeNumber = []
- #反復処理の回数を、一時保存できる変数(Counter2)を用意する
- Counter2 = 0
- #変数(Counter)に2を代入する
- Counter = 2
- #変数(Counter)が100になるまで、以下の処理を繰り返す
- while Counter < 100:
- #変数(Counter2)に2を代入する
- Counter2 = 2
- #変数(Counter2)が(Counter)未満の間、以下の処理を繰り返す
- while Counter2 < Counter:
- #変数(Counter)を変数(Counter2)で割った余りを出す
- #余りが0なら
- if Counter % Counter2 == 0 :
- #breakする
- break
- #余りが0以外なら
- else :
- #変数(Counter2)の値に1を足す
- #変数(Counter2)に変数(Counter2)の値を代入する
- Counter2 = Counter2 + 1
- #breakしなかったら
- else :
- #変数(PrimeNumber)に代入する
- PrimeNumber.append(Counter)
- #変数(Counter)の値に1を足す
- #変数(Counter)に変数(Counter)の値を代入する
- Counter = Counter + 1
- #変数(PrimeNumber)を表示する
- print (PrimeNumber)
実行結果
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
そもそも、1~100までの整数をいったん保管しておくこと自体が無駄な作業ですね。なので、NaturalNumberを無くしました。
このように無駄なコードは無駄な変数に直結していることはわかります。NaturalNumberを無くせば良いという発想で見ていくと、無駄な処理が見えてきます。そうすると、簡略化した形で書けるようになってきます。