令和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 (注:本サイトでは原問題の選択肢の表を文字表記に変換しています)
出典:令和8年度 ITパスポート試験 問85
- アa:以下,b:と等しい
- イa:以下,b:より大きい
- ウa:より小さい,b:と等しい
- エa:より小さい,b:より大きい
正解:エ
解説
素数は2以上で,1と自分自身以外で割り切れない整数です。a は1(素数ではない)を弾く条件で,num が 2 より小さいときに false を返します。「以下」にすると isPrime(2) が false になってしまい,問題文の例と合いません。b は div を2から1ずつ増やして割り切れるかを調べる繰返しの条件です。div が num に達する前まで調べればよいので,num が div より大きい間繰り返します。例えば num=3 では div=2 で割り切れないため div=3 となり,3 が 3 より大きくないので繰返しを終えて true を返します。
選択肢ごとの解説
- ア誤り。a が「以下」だと isPrime(2) が false になってしまいます。b を「と等しい」にすると,num と div が等しくない通常のときに繰返しが実行されません。
- イ誤り。a が「以下」だと isPrime(2) が false になり,問題文の例に反します。
- ウ誤り。a は適切ですが,b が「と等しい」だと,num が 2 のときは自分自身の 2 で割り切れて false を返してしまい,num が 3 以上では繰返しが実行されないため,4 のような素数でない数でも true を返してしまいます。
- エ正しい。a は num が 2 より小さいとき false を返し,b は div が num より小さい間(num が div より大きい間)割り切れるかを調べ続けます。