令和8年度 ITパスポート試験 公開問題 問85
テクノロジアルゴリズム擬似言語・プログラム読解
関数 isPrime は,引数として与えられた正の整数が,素数であれば true を,素数でなければ false を戻り値とする。例えば,関数 isPrime を isPrime(2) として呼び出したときの戻り値は true である。プログラム中の a, b に入れる字句の適切な組合せはどれか。

図の説明テキスト
素数判定を行う関数 isPrime の擬似コード。
○論理型: isPrime(整数型: num)
整数型: 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
解答・解説
正解: エ. a: より小さい, b: より大きい
関数 isPrime の擬似コードを読み解き、空欄 a と b に入る適切な条件を考えます。
空欄 a について
問題文に「引数として与えられた正の整数が、素数であれば true を、素数でなければ false を戻り値とする」「isPrime(2) として呼び出したときの戻り値は true」と記述されています。
プログラムの最初の条件分岐は以下のようになっています。
if (num が 2 [ a ])
return false
もし a に「以下」が入ると、num が のときにも条件が成立してしまい、return false が実行されてしまいます。これでは isPrime(2) の戻り値が true にならないため不適切です。
一方、a に「より小さい」が入ると、引数である正の整数 num が のときのみ条件が成立して false(素数ではない)を返し、 のときは else の処理に進むため、正しく動作します。よって、a には「より小さい」が入ります。
空欄 b について
else 以降の処理では、div を初期値 から順に ずつ増やしながら、num を div で割った余りが になるか(割り切れるか)を確認しています。
while (num が div [ b ])
if (num ÷ div の余り が 0 と等しい)
return false
素数は「 とその数自身以外に正の約数を持たない数」です。もし div が num と等しくなるまでループを実行してしまうと、必ず「num ÷ div の余り が 0 と等しい」が成立し、素数であっても誤って false が返されてしまいます。
そのため、割り切れるかどうかの判定は、div が num よりも小さい間(すなわち num が div より大きい間)だけ繰り返す必要があります。よって、b には「より大きい」が入ります。
各選択肢の解説
- ア:a が「以下」だと
isPrime(2)がfalseになってしまい、b が「と等しい」だとnumとdivが異なる場合にループが実行されないため誤りです。 - イ:a が「以下」だと
isPrime(2)がfalseになってしまうため誤りです。 - ウ:b が「と等しい」だと
numとdivが異なる場合にループが実行されないため誤りです。 - エ:a が「より小さい」、b が「より大きい」の組合せであり、正解です。