問題
問85
関数 isPrime は,引数として与えられた正の整数が,素数であれば true を,素数でなければ false を戻り値とする。例えば,関数 isPrime を isPrime(2) として呼び出したときの戻り値は true である。プログラム中の a,b に入れる字句の適切な組合せはどれか。


- 上記表の「ア」
- 上記表の「イ」
- 上記表の「ウ」
- 上記表の「エ」
[出典:ITパスポート試験 令和8年度 問85]
正解
正解は「エ」です。
解説
正解は「エ」です。この問題は、与えられた数が「素数」であるかを判定するアルゴリズムの論理を問うものです。素数とは、1とその数自身以外で割り切れない2以上の整数のことです。
まず、空欄aについて考えます。問題文には「isPrime(2)の戻り値はtrue」と明記されています。もしaに「以下」を入れると、引数numが2のときに「if (2 が 2 以下)」という条件が成立してしまい、falseを返してしまいます。これでは2が素数ではないことになり、前提条件に矛盾します。したがって、aには2を含まない「より小さい」が入ります。
これにより、1のときはfalseを返し、2以上のときはelse以降の処理へ進むようになります。 次に空欄bです。while文による繰り返し処理では、div(割る数)を2から1ずつ増やしながら、numが割り切れるかを確認しています。もしbに「と等しい」を入れると、numがdivと等しくなったときに初めてループ内に入り、自分自身で割った余りを計算します。当然余りは0になり、すべての数がfalseと判定されてしまいます。
正しくは、自分自身より小さい数(2からnum-1まで)で割り切れるかを確認すべきなので、bには「より大きい(num > div)」が入ります。このように、具体的な数字を当てはめて動作を確認することが正解への近道です。
ア(a:以下、b:と等しい):
aに「以下」を入れると、2を素数ではないと判定してしまうため、問題の条件に矛盾します。
イ(a:以下、b:より大きい):
bの条件は正しいですが、aに「以下」を入れると2を素数として正しく判定できません。
ウ(a:より小さい、b:と等しい):
aの条件は正しいですが、bに「と等しい」を入れると、自分自身で割った際にfalseとなり正しく判定できません。
難易度
プログラムの基本である「条件分岐」と「繰り返し」の理解に加え、算数の知識である「素数」の定義を論理的に結びつける必要があります。一見難しく見えますが、具体的な数字(2や3など)を代入して一行ずつ動作を追う「トレース」を行えば、初心者の方でも論理の矛盾に気づき、正解を導き出すことができる問題です。
用語補足
素数:
1とその数自身でしか割り切れない、2以上の整数のことです。例えば2、3、5、7などが該当します。
剰余演算:
割り算をしたときの「余り」を求める計算です。プログラミングでは、ある数が別の数で割り切れるかを判定する際によく使われます。
トレース:
プログラムの実行手順を、机上で一行ずつ追いかけながら変数の値の変化を確認する作業のことです。
境界値:
判定条件の境目となる値のことです。この問題では「2」がそれにあたり、ここでの挙動を考えるのが解法のポイントです。
対策
この問題を解くためのポイントは、問題文に与えられた「isPrime(2)はtrue」というヒントを最大限に活用することです。プログラムの穴埋め問題では、0や1、あるいは今回のような条件の境目となる「境界値」を実際に代入してみることで、多くの選択肢を絞り込むことができます。「以下」と「より小さい」のような細かな言葉の違いが正誤を分けるため、慎重に比較検討する対策が有効です。

