ヒント_3_14

ヒント:練習問題_3_14(最大公約数② 素因数分解を参考に)

解答例は練習問題_3_8の素因数分解 試し割り法を参考とし、割り切れるかどうか確認する内側のループ処理をfor if break elseで、公約数の回数だけ回す外側のループ処理にはwhile文を使用しています。
timeモジュールやカウンターの設定は前問①と同じですので、以下は練習問題_3_8との違いをメインに記載します。

  1. 内側のfor文のシーケンスには range(x_start, min(a, b) + 1) を使います。そしてx_startの初期値は2です。この初期値を1とするとx_startは1が継続使用されてwhile文が無限ループになります。この辺はコードを書いてる途中で気付くことが多いです。最大公約数(g)は共通の約数の掛け算ですので初期値は1です。したがってa, bに異なる素数が入力された場合は、この初期値の1が結果として出力されます。
  2. 内側のfor文のシーケンス range(x_start, min(a, b) + 1)min(a, b) + 1 は前問①と同じく a = nb (nは自然数) の場合 a を最大公約数(g)として出力する必要があるためです。
  3. 判定のif文の条件は前問①と同様、処理文は練習問題_3_8と同様にaとbはxで割り算したもの、x_startにはxを代入します。また g *= x を追加する必要があります。

解答例はこちら

タイトルとURLをコピーしました