関数 isPrime は、引数として与えられた正の整数が、素数であれば true を、素数でなければ false を戻り値とする。例えば、関数 isPrime を isPrime (2)として呼び出したときの戻り値はtrueである。プログラム中のa, bに入れる字句の適切な組合せはどれか。 [プログラム] ○論理型:isPrime (整数型: num) 整数型:div div ← 2 if (num が 2 [ a ]) return false else while (num が div [ b ]) if (num ÷ div の余りが0と等しい) return false else div ← div + 1 endif endwhile return true endif

この設問が問うていること
素数判定アルゴリズムの理解と、条件分岐・繰り返し処理における比較演算子の適切な選択について問う設問です。
総合解説
正解はエです。この問題は、素数判定のアルゴリズムを理解し、プログラムの条件分岐(`if`文)と繰り返し処理(`while`文)における適切な比較演算子を選択できるかを問うものです。 まず、`a` について考えます。素数は「1とその数自身以外に正の約数を持たない、1より大きい自然数」と定義されます。したがって、1は素数ではありません。プログラムでは、`num` が素数でない場合に `return false` となるべきです。 ・`isPrime(1)` の場合、`if (1 が 2 [ a ])` が `true` となり `return false` となるのが適切です。この条件を満たすのは `a` が「より小さい」の場合です(1は2より小さい)。 ・また、`isPrime(2)` は `true` を返すと問題文にあります。もし `a` が「以下」だと、`if (2 が 2 以下)` が `true` となり `return false` となってしまい、2が素数と判定されません。したがって、`a` は「より小さい」が正しいです。 次に、`b` について考えます。`while` ループは、`num` が `div` で割り切れるかどうかを順にチェックする部分です。素数判定では、`div` が `num` の平方根を超えるまで、または `div` が `num` と等しくなるまでループを続けるのが一般的ですが、このプログラムの構造では `div` が `num` に到達する前にループを終了させる必要があります。 ・もし `num` が素数(例:7)の場合、`div` が2から始まり、6までチェックして割り切れなければ `return true` となるべきです。`div` が7になったときにループが継続すると、`7 ÷ 7 の余りが0と等しい` が `true` となり `return false` となってしまい、素数と判定されません。 ・したがって、`div` が `num` と等しくなる直前までループを続ける必要があります。つまり、`num` が `div` より大きい間はループを継続し、`num` と `div` が等しくなったらループを終了する、という条件が必要です。この条件を満たすのは `b` が「より大きい」の場合です。 以上の理由から、`a` には「より小さい」、`b` には「より大きい」が入るのが適切であり、選択肢エが正解となります。
こんな聞き方もできます(タップで質問)