ヒント_3_11

ヒント:練習問題_3_11(素数list)

n が素数であるかどうかの確認は、2から nの平方根を整数化したint(n**0.5)まで順番に割り切れるかどうかを確認し、一つでも割り切れるものがあった場合は素数ではないと判断してそこでbreakします。
breakする理由は一つでも割り切れる約数があれば素数ではないと判断できるので、それ以降の無駄な実行時間をカットするためです。
上記 for文の外側にrange(n_start, n_stop + 1)をシーケンスとしたfor文が必要となりますので、結果的に2重のforループとなります。(ここで n_stop + 1 としているのは、n_stop についても素数判定ができるようにするためです)2重forループの一番内側でbreakした場合は、一つ外側のforループに戻ります。つまりbreak文は直近のforループを中断するもので、一つ外側のforループについては中断されません。

  1. 最初に n_start, n_stop が2以上のint型でかつ n_start ≦ n_stopであることを判定します。
  2. 次に戻り値となるlistの初期値[]を設定します。
  3. 最初のforループをrange(n_start, n_stop + 1)をシーケンスとして記載します。
  4. その内側にforループをrange(2, int(n**0.5) + 1) として記載します。(nは上記ループの要素変数)
  5. if文で 外側の要素変数が内側の要素変数で割り切れるかを判定して、Trueの時は breakします。
  6. 内側のfor文のインデント位置にelseを記載して、内側のループでbreakしなかった場合すなわち素数と判定された nを戻り値listにappendメソッドで追加します。
  7. 1番の判定で、引数の条件を満たさない場合のメッセージを出力し、Noneを戻します。

解答例はこちら

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