アルゴリズムとプログラミング|令和8年度 ITパスポート試験 問85
関数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にはより大きいが入ります。
この関数は、2から順に割ってみて、割り切れたら素数ではないと判断します。はじめの判定は、そもそも判定の対象にならない値をはじくためのものです。素数のうちいちばん小さいのは2なので、2を下回る値は素数ではありません。よってaにはより小さいが入ります。次の繰返しは、割る数を2から1ずつ増やしながら試すところです。割る数が調べたい値に追いつくまで続ければよいので、調べたい値のほうが割る数より大きい間だけ回します。よってbにはより大きいが入ります。なお、割る数を調べたい値の平方根までに限れば、同じ答えをもっと早く出せます。この関数は、そこまでの工夫はしていません。
ほかの選択肢はなぜ違うのか
- aを以下としています。これでは2そのものもはじかれてしまい、2を渡したときに素数ではないと返ることになります。bをと等しいとしている点も、繰返しがほとんど回らなくなります。
- aを以下としています。bはより大きいで合っていますが、最初の判定で2をはじいてしまうため、2に対する答えが誤りになります。二つの空欄のうち一方が外れているだけでも、関数としては正しく動きません。
- aはより小さいで合っていますが、bをと等しいとしています。割る数と調べたい値が等しいときだけ回ることになり、2から順に割っていくという進み方になりません。
この問題に関係する言葉
- 素数
- プログラムコンピュータへの命令をまとめたもの。著作権法ではソースプログラムそのものが保護され、その中のアイディアやアルゴリズムは保護されません。
出典:令和8年度 ITパスポート試験 問85(改変:原典の図表をテキストに書き起こした)
同じ単元をまとめて解くならアルゴリズムとプログラミングへ。
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)