【記事の目標】
任意の数値(n)を素因数分解する。
【作業手順】
1.任意の数値(n)を素因数分解してみよう
2.結果を確認してみよう
1.任意の数値(n)を素因数分解してみよう
素因数分解は難しいですが、私が思う手順は以下かと思います。
①任意の数値(n)を素数で割り算して、余りが 0 になるものを見つける
②余りが 0 になった素数を結果リストに格納し、任意の数値(n)に割り算の結果を格納する
③任意の数値(n)が 1 になるまで、①②を繰り返す
④結果を出力する
こちらは私のイメージですので、考え方はいろいろあると思います。
それでは、事前準備をしましょう。
計算上で使う任意の数値(calc_n)を生成し、任意の数値(n)を設定。
素因数分解の結果を格納するリストを生成。
calc_n = n
prime_factorization_list = []
計算結果が 1 になるまで繰り返し処理をするため、while文を使用します。
while calc_n != 1:
で作成した素数リストを繰り返して、
①任意の数値(n)を素数で割り算して、余りが 0 になるものを見つける
②余りが 0 になった素数を結果リストに格納し、任意の数値(n)に割り算の結果を格納する
③任意の数値(n)が 1 になるまで、①②を繰り返す
この部分をロジック化しましょう。
for i in range(0, len(result_list)):
if calc_n % result_list[i] == 0:
prime_factorization_list.append(result_list[i])
calc_n = calc_n / result_list[i]
これで、素因数分解が出来そうですね。
任意の数値(n)を 100 として、処理を実行してみましょう。
予想では、 2 × 2 × 5 × 5 = 100 なので、2, 2, 5, 5 と出てきそうですね。
実施結果は以下です。
[2, 5, 2, 5]
結果数値はあっていますが、リストの順番が気に入らないのでソートしましょう。
prime_factorization_list.sort()
これで結果が綺麗になりました。
[2, 2, 5, 5]
100 を素因数分解できました。
前回に引き続き、素因数分解をやってきました。
前回作成した素数リストを使って、素因数分解までできましたね。
今回は「割り算の結果の余りが 0 になるまで」という条件で処理を行いましたが、「その素数で割り切れなくなるまで」という条件で処理を行うと、最後のソートは必要ないかもしれませんね。
考え方が様々あるように、実現方法も様々あるので、自分の分かるやり方でやってみるのが一番ですね。