ヒント:練習問題_3_12(素因数分解 試し割り法)
本問題は素因数を一つずつ格納する外側のループと、nを素因数で割った商が素因数を持つかどうか(素数で割り切れるかどうか)を調べるための内側のループの二重ループ構造のなることが予想されます。
内側の素因数を持つかどうかは、練習問題_3_7(素数list)で使った for if break else を応用することができるので、正解例では内側のループをfor、外側のループをwhileで作っています。
以下は解答例の説明です。できれば見ないで自分で作成してみて下さい。
- 最初に nが2以上のint型であることを判定します。
- 次に戻り値となるlistの初期値[]を設定します。
- 内側のforループのシーケンスは range(x_start, int(n**0.5) + 1) を使いますので、x_start(割り切れるかどうかを確認する最初の整数)の初期値を2にここで設定します。
- 外側のwhileループはbreakで止めるので条件は Trueとしています。
- その内側にforループを range(x_start, int(n**0.5) + 1) をシーケンスとして設定します。
- if文で nがforの変数 x で割り切れるかを n%x == 0 で判定して、Trueの時に以下を行います。
- 戻り値となるlistに x を追加
- n に n//x を代入、x_start に x を代入
- break (for文をbreak)
- for文のelse(割り切れないと判断した場合)として以下を行います。
- 戻り値となるlistに n を追加
- break (while文をbreak)
- 1番の判定で、引数の条件を満たさない場合のメッセージを出力し、Noneを戻します。