
基本情報技術者試験 令和5年度 公開問題 科目B、全6問のうちの問1。
出典:令和5年度 基本情報技術者試験 公開問題 科目B 問1(プログラムは原本の画像を文字に書き起こし、字下げは 1 段を空白 2 つで表した。空欄は[ a ][ b ]で、解答群の表は 1 行の文に組み直した)
次の
関数 findPrimeNumbers は,
○整数型の配列: findPrimeNumbers(整数型: maxNum)整数型の配列: pnList ← {} // 要素数0の配列整数型: i, j論理型: divideFlagfor (i を 2 から [ a ] まで 1 ずつ増やす)divideFlag ← true/* iの正の平方根の整数部分が2未満のときは,繰返し処理を実行しない */for (j を 2 から iの正の平方根の整数部分 まで 1 ずつ増やす) // αif ([ b ])divideFlag ← falseαの行から始まる繰返し処理を終了するendifendforif (divideFlag が true と等しい)pnListの末尾 に iの値 を追加するendifendforreturn pnList
- アa maxNum,
b i ÷ j の 余り が 0 と等しい - イa maxNum,
b i ÷ j の 商 が 1 と 等しくない - ウa maxNum + 1,
b i ÷ j の 余り が 0 と等しい - エa maxNum + 1,
b i ÷ j の 商 が 1 と 等しくない
答えと解説を開く
正解はアです。
外側の
ほかの選択肢が違う理由
- イi が
4 以上 なら、 j = 2 の ときの 商は 2 以上で、 1 と 等しく ありません。 4 以上の 数が 全部外れ、 maxNum = 10 なら {2, 3} しか 返りません。 - ウb は
合っていますが、 i を maxNum + 1 まで 回します。 maxNum = 10 なら 11 も 調べて 追加し、 {2, 3, 5, 7, 11} に なります。 - エi を
maxNum + 1 まで 回すうえに、 商で 判定するので 4 以上の 数が 全部外れます。 maxNum = 10 なら {2, 3} に なります。
仕組み
ある
「割り