令和8年度 ITパスポート 問85(テクノロジ)
出典:令和8年度 ITパスポート試験 公開問題 問85(独立行政法人情報処理推進機構(IPA))
関数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
| 選択肢 | a | b |
|---|---|---|
| ア | 以下 | と等しい |
| イ | 以下 | より大きい |
| ウ | より小さい | と等しい |
| エ | より小さい | より大きい |
正解と解説を見る
正解:エ
【素数の判定の考え方】
素数は、1とその数自身でしか割り切れない、2以上の整数です(1は素数ではありません)。ある数numが素数かどうかは、2からnum - 1までの数で順に割ってみて、一度も割り切れなければ素数だと判定できます。
【aに入る字句】
numが2より小さい(つまり1)なら、素数ではないのでfalseを返します。aが「以下」だと、num = 2のときもfalseになってしまいますが、問題文のとおりisPrime(2)はtrueでなければなりません。したがって、aは「より小さい」です。
【bに入る字句】
whileの繰返しでは、divを2から1ずつ増やしながら、numがdivで割り切れるかを調べます。調べるのはdivがnum - 1になるまでなので、「numがdivより大きい」間だけ繰り返します。
・num = 2:最初から2はdiv(2)より大きくないので、繰り返さずにtrueを返す(2は素数)
・num = 4:4はdiv(2)より大きいので割ってみると、余りが0なのでfalseを返す
・num = 5:div = 2、3、4で割っても余りが0にならず、div = 5になったところで繰返しが終わってtrueを返す
bが「と等しい」だと、num = 4のときdiv(2)と等しくないので、一度も割らずにtrueを返してしまいます。
aはより小さい、bはより大きいの組合せです。よって、正解は選択肢エです。