問85 素数を判定する条件

ITパスポート 令和8年度 公開問題、全100問のうちの問85。

出典:令和8年度 ITパスポート試験 公開問題 問85(プログラムは原本の画像を文字に書き起こし、空欄を[ a ][ b ]の形で示した。選択肢の表を文に組み直した)

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

プログラム
○論理型: 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
  1. アa 以下,b と等しい
  2. イa 以下,b より大きい
  3. ウa より小さい,b と等しい
  4. エa より小さい,b より大きい
答えと解説を開く

正解はエです。

素数は、1 とその数自身でしか割り切れない、2 以上の整数です。まず a を考えます。1 は素数ではないので false を返す必要があります。一方、例にあるとおり 2 は true を返さなければならないので、「num が 2 以下」では 2 まで false になってしまいます。a は「より小さい」です。次に b です。div を 2 から 1 ずつ増やし、num を割り切れたら素数ではありません。調べるのは num の手前までで、num 自身で割ると必ず割り切れてしまうので、「num が div より大きい」間だけ繰り返します。2 を入れると、2 は 2 より大きくないので繰返しに入らず true になり、例とも合います。だから正解はエです。

ほかの選択肢が違う理由

  • ア「num が 2 以下」だと、素数の 2 に false を返してしまいます。また「と等しい」だと、num が 2 のとき以外は繰返しに入らないので、4 のような素数でない数にも true を返します。
  • イ「num が 2 以下」だと、isPrime(2) が false になり、例の true と合いません。
  • ウa は合っていますが、「num が div と等しい」間だけ繰り返すと、num が 2 のとき以外は繰返しに入らず、割り切れるかを調べないまま true を返します。例えば 4 も true になってしまいます。

仕組み

このように、割る数を 2 から順に試す方法を試し割りと言います。

穴埋めの問題では、例の値 (ここでは 2) や、境目の値 (1、3、4) を入れてトレースすると、どの選択肢が合うかを確かめられます。

この問に出る言葉