令和8年度 問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: と等しい
- イ a: 以下, b: より大きい
- ウ a: より小さい, b: と等しい
- エ a: より小さい, b: より大きい
正解と解説を見る
正解: エ
- ア: a の「以下」だと、num = 2 のとき false になり、素数の 2 が素数でないことになります。b の「と等しい」だと、ほとんどの場合ループが回りません。
- イ: a の「以下」だと、num = 2 のとき false を返してしまい、2 が素数と判定できません。
- ウ: b の「と等しい」だと、num = 3 のとき div = 2 で条件が偽となり、すぐ true になるなど、ループが正しく働きません。
- エ: a は 2 より小さい数を弾き、b は div が num より小さい間繰り返すので、素数を正しく判定できます。正しい答えです。
ポイント
素数は、2 以上で、1 と自分自身以外では割り切れない数です。
- a: 最初に、素数でない 1 以下 (2 より小さい数) を弾きます。num が 2 より小さい なら false を返します。
- b: 2 以上の num について、div を 2 から 1 ずつ増やしながら、割り切れるか調べます。div が num に達するまで (num が div より大きい間) 繰り返します。
確かめ: num = 2 のとき、a は偽で、b の while は最初から偽 (2 > 2 でない) なので、true を返します。num = 4 のとき、div = 2 で余り 0 なので false です。
広告
「アルゴリズムとプログラミング」をこのサイトで解く (記録・間違えた問題の解き直し・AI教師への質問)
広告