本文へ移動

基本情報技術者試験 · 学習ガイド

2023年度 科目B 公開問題の問題・解答解説

旧制度の午前・午後と、2023年度以降の科目A・科目Bの公開問題を区別しています。現在の試験対策では現行シラバスと科目Bの形式を確認してください。公開問題は本試験の全出題を網羅する資料ではありません。

2023年度 科目B 公開問題の概要
30:00

問題番号から選ぶ

素数列挙アルゴリズムのループ上限と剰余判定

アルゴリズムとプログラミング · 素数判定 / エラトステネスの篩の考え方 / 剰余演算

引数 maxNum 以下のすべての素数を配列に格納して返す関数 findPrimeNumbers において、空欄 a および b に入れる正しい字句の組合せを選べ。なお、配列の要素番号は 1 から始まり、maxNum は 2 以上の整数とする。

解答・解説を表示

解答

ア

解説

まず要点:整数が素数かどうかは、2からその数の平方根までの整数で順に割り、割り切れる数があるかで調べます。1つでも割り切れる数が見つかれば、それは素数ではなく合成数(1と自分以外にも割り切れる数)です。そのため、割り切れたかどうかは割り算の余りが0かどうかで判定します。

解き方

  1. 外側のループは調べる数の範囲を決めるので、2から引数 maxNum まで1ずつ増やしながら判定します(a は maxNum)。
  2. 内側のループでは、各整数 i を2から√iまでの j で割って割り切れるか調べ、割り切れたら素数フラグ divideFlag を false にして抜けます(b は「i ÷ j の余りが 0 と等しい」)。
選択肢 ア正解
a に maxNum、b に「i ÷ j の余りが 0 と等しい」を入れると、maxNum 以下の素数だけを正しく取り出せます。
選択肢 イ不正解
「商が 1 と等しくない」では割り切れたかを判断できないので、合成数を正しく取り除けません。
選択肢 ウ不正解
a を maxNum + 1 にすると調べる範囲が1つ増え、maxNum より大きい数まで探してしまいます。
選択肢 エ不正解
a の上限が maxNum + 1 で範囲を超え、b でも商を比べているので、2か所とも誤りです。

答えの内訳

a:maxNum
引数で与えられた整数 maxNum 以下の素数をすべて求めるため、外側ループで検証する整数 i の範囲は 2 から maxNum までとなります。
b:i ÷ j の余り が 0 と等しい
整数 i が 2 以上 √i 以下の整数 j で割り切れる場合、i は素数ではないため、剰余演算により余りが 0 であるかを判定します。

覚えるポイント

  • 素数判定では 2 から √n までの数で割り切れるか(余りが 0 か)を確認します。

間違えやすいところ

  • 余りで判定することと商で判定することを混同しないよう注意しましょう。

出題の前提:令和5年度基本情報技術者試験 科目B 公開問題 問1

出典:IPA『2023年度 科目B 公開問題』
公式問題冊子 p.4 ↗(www.ipa.go.jp)

2023年度 科目B 公開問題

参照した公式資料

IPAが公開した2023年度 科目B 公開問題の問題・解答資料です。