ヒント_3_12

ヒント:練習問題_3_12(素因数分解 試し割り法)

本問題は素因数を一つずつ格納する外側のループと、nを素因数で割った商が素因数を持つかどうか(素数で割り切れるかどうか)を調べるための内側のループの二重ループ構造のなることが予想されます。
内側の素因数を持つかどうかは、練習問題_3_7(素数list)で使った for if break else を応用することができるので、正解例では内側のループをfor、外側のループをwhileで作っています。
以下は解答例の説明です。できれば見ないで自分で作成してみて下さい。

  1. 最初に nが2以上のint型であることを判定します。
  2. 次に戻り値となるlistの初期値[]を設定します。
  3. 内側のforループのシーケンスは range(x_start, int(n**0.5) + 1) を使いますので、x_start(割り切れるかどうかを確認する最初の整数)の初期値を2にここで設定します。
  4. 外側のwhileループはbreakで止めるので条件は Trueとしています。
  5. その内側にforループを range(x_start, int(n**0.5) + 1) をシーケンスとして設定します。
  6. if文で nがforの変数 x で割り切れるかを n%x == 0 で判定して、Trueの時に以下を行います。
    • 戻り値となるlistに x を追加
    • n に n//x を代入、x_start に x を代入
    • break (for文をbreak)
  7. for文のelse(割り切れないと判断した場合)として以下を行います。
    • 戻り値となるlistに n を追加
    • break (while文をbreak)
  8. 1番の判定で、引数の条件を満たさない場合のメッセージを出力し、Noneを戻します。

解答例はこちら

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