望月の息抜き

在宅勤務の息抜きです。主にプログラミングについて書いていきたいと思います。

【Python】【22】素因数分解してみよう②

【記事の目標】

任意の数値(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:

 

【Python】【21】素因数分解してみよう①

で作成した素数リストを繰り返して、

 ①任意の数値(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 になるまで」という条件で処理を行いましたが、「その素数で割り切れなくなるまで」という条件で処理を行うと、最後のソートは必要ないかもしれませんね。

考え方が様々あるように、実現方法も様々あるので、自分の分かるやり方でやってみるのが一番ですね。