旧制度の午前・午後と、2023年度以降の科目A・科目Bの公開問題を区別しています。現在の試験対策では現行シラバスと科目Bの形式を確認してください。公開問題は本試験の全出題を網羅する資料ではありません。
2023年度 科目B 公開問題の概要
素数列挙アルゴリズムのループ上限と剰余判定
アルゴリズムとプログラミング · 素数判定 / エラトステネスの篩の考え方 / 剰余演算
引数 maxNum 以下のすべての素数を配列に格納して返す関数 findPrimeNumbers において、空欄 a および b に入れる正しい字句の組合せを選べ。なお、配列の要素番号は 1 から始まり、maxNum は 2 以上の整数とする。
解答・解説を表示
解答
ア
解説
まず要点:整数が素数かどうかは、2からその数の平方根までの整数で順に割り、割り切れる数があるかで調べます。1つでも割り切れる数が見つかれば、それは素数ではなく合成数(1と自分以外にも割り切れる数)です。そのため、割り切れたかどうかは割り算の余りが0かどうかで判定します。
解き方
- 外側のループは調べる数の範囲を決めるので、2から引数 maxNum まで1ずつ増やしながら判定します(a は maxNum)。
- 内側のループでは、各整数 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)
手続きの相互呼出しと呼出し順序のトレース
アルゴリズムとプログラミング · 手続き呼出し / 実行順序のトレース / コールスタック
次のプログラムにおいて、手続 proc2 を呼び出したときに出力される文字列の順序として正しいものを選べ。 〔プログラム〕 ○proc1() "A" を出力する proc3() ○proc2() proc3() "B" を出力する proc1() ○proc3() "C" を出力する
解答・解説を表示
解答
ク
解説
まず要点:ある手続きから別の手続きを呼び出すと、呼び出された側の処理がすべて終わってから、元の手続きの次の行に戻ります。この「行って戻る」順序を1行ずつ追いかけるのがコツです。呼び出しは紙を積み重ねる(スタック)ようなイメージで考えると分かりやすいです。
解き方
- proc2() が始まると、まず proc3() を呼び出します。すると proc3() によって「C」が出力されます。
- proc2() に戻り、次の行で「B」が出力されます。
- 続いて proc1() を呼び出します。proc1() の最初で「A」が出て、次に proc3() を呼んで「C」が出ます。
- すべての出力をつなげると「C」「B」「A」「C」になります。
- 選択肢 ア不正解
- proc2 の最初で proc3 が呼ばれて「C」が出るので、この並びにはなりません。
- 選択肢 イ不正解
- これは proc2 ではなく proc1 だけを実行したときの出力なので違います。
- 選択肢 ウ不正解
- proc2 の最初に出るのは proc3 による「C」なので、この並びにはなりません。
- 選択肢 エ不正解
- proc2 では「B」を出す前に proc3 を呼ぶので、この並びにはなりません。
- 選択肢 オ不正解
- proc2 の中の実行順と、呼び出し先の処理内容に合っていません。
- 選択肢 カ不正解
- proc2 の最後にある proc1() の呼び出しで出る「A」が足りません。
- 選択肢 キ不正解
- proc1() から呼ばれる proc3() による最後の「C」が足りません。
- 選択肢 ク正解
- proc2 で proc3()(「C」)、「B」、proc1() 内の「A」と proc3()(「C」)の順に実行され、並びが一致します。
関連する分野を学ぶ
覚えるポイント
- 関数呼び出しが行われたら処理が移動し、完了後に元の位置に戻って次の文を実行します。
間違えやすいところ
- 呼び出し元の手続きに残った処理(proc1 の呼び出しなど)を忘れないようにしましょう。
出題の前提:令和5年度基本情報技術者試験 科目B 公開問題 問2
出典:IPA『2023年度 科目B 公開問題』
公式問題冊子 p.5 ↗(www.ipa.go.jp)
クイックソートにおける1回目の分割処理のトレース
アルゴリズムとプログラミング · クイックソート / ピボット選択 / パーティション
大域配列 data ← {2, 1, 3, 5, 4} に対し、手続 sort(1, 5) を呼び出したとき、/*** α ***/ の行を最初に実行した直後の配列 data の出力として正しいものを選べ。なお、配列の要素番号は 1 から始まる。
解答・解説を表示
解答
エ
解説
まず要点:クイックソートの分割(パーティション)では、基準になる値(ピボット)を決め、左からはピボット以上の要素、右からはピボット以下の要素を探し、見つかったら交換します。探す2つの位置(ポインタ)が交差するか同じになったら、その回の分割は終わりです。
解き方
- first = 1, last = 5 で呼び出され、pivot は data[(1 + 5) ÷ 2 の商] = data[3] = 3 に決まります。i は 1、j は 5 から始まります。
- 内側の while (data[i] < pivot) で、data[1]=2 (<3) で i=2、data[2]=1 (<3) で i=3 と進み、data[3]=3 で止まります。
- 次の while (pivot < data[j]) で、data[5]=4 (>3) で j=4、data[4]=5 (>3) で j=3 と進み、data[3]=3 で止まります。
- if (i ≧ j) は 3 ≧ 3 で成り立つので、繰り返しを終了(break)します。要素の交換は一度も行われません。
- while ループを抜けた直後に /*** α ***/ が実行され、data の中身は変わらず「2 1 3 5 4」が出力されます。
- 選択肢 ア不正解
- これはソートが全部終わった後の並びで、問われているのは1回目の分割の直後なので違います。
- 選択肢 イ不正解
- data[1] と data[2] を交換した並びですが、1回目の分割では交換が起きないので違います。
- 選択肢 ウ不正解
- 最後の 5 と 4 を交換した並びですが、1回目の分割ではこの交換は行われません。
- 選択肢 エ正解
- i=3, j=3 となって交換が行われないまま分割のループが終わるので、最初の並び「2 1 3 5 4」のまま出力されます。
関連する分野を学ぶ
覚えるポイント
- クイックソートのトレース問題では、再帰呼出しに入る前(1回目の分割終了時)の状態を慎重に追う必要があります。
間違えやすいところ
- 最後までソートした完全な昇順の結果(1 2 3 4 5)を選んでしまう間違いに注意しましょう。
出題の前提:令和5年度基本情報技術者試験 科目B 公開問題 問3
出典:IPA『2023年度 科目B 公開問題』
公式問題冊子 p.6 ↗(www.ipa.go.jp) / 公式問題冊子 p.7 ↗(www.ipa.go.jp)
ハッシュ法の衝突解決処理のトレース
アルゴリズムとプログラミング · ハッシュ表 / ハッシュ関数 / オープンアドレス法
5個の要素をもつ大域配列 hashArray(要素番号 1〜5、初期値はすべて -1)に対して、手続 test を実行した直後の hashArray の内容として正しいものを選べ。 〔ハッシュ関数〕 calcHash1(value) = (value mod 5) + 1 calcHash2(value) = ((value + 3) mod 5) + 1 〔手続 test〕 hashArray ← {5個の -1} add(3) add(18) add(11)
解答・解説を表示
解答
エ
解説
まず要点:ハッシュ表にデータを入れるときは、ハッシュ関数で入れる場所(インデックス)を計算します。そこにすでに別のデータがある状態を衝突といい、そのときは別のハッシュ関数を使って空いている場所を探して入れます。
解き方
- 最初の状態: hashArray = {-1, -1, -1, -1, -1}
- add(3): calcHash1(3) = (3 mod 5) + 1 = 4。hashArray[4] は -1 なので 3 を入れます。配列は {-1, -1, -1, 3, -1} になります。
- add(18): calcHash1(18) = (18 mod 5) + 1 = 4。hashArray[4] には 3 があるので衝突です。else に進み calcHash2(18) = ((18 + 3) mod 5) + 1 = (21 mod 5) + 1 = 2。hashArray[2] は -1 なので 18 を入れます。配列は {-1, 18, -1, 3, -1} になります。
- add(11): calcHash1(11) = (11 mod 5) + 1 = 2。hashArray[2] には 18 があるので衝突です。else に進み calcHash2(11) = ((11 + 3) mod 5) + 1 = (14 mod 5) + 1 = 5。hashArray[5] は -1 なので 11 を入れます。配列は {-1, 18, -1, 3, 11} になります。
- 選択肢 ア不正解
- add(3) のハッシュ値は (3 mod 5)+1 = 4 なので 3 は要素4に入り、要素2に入るこの並びは違います。
- 選択肢 イ不正解
- add(18) を入れた結果が反映されていないので違います。
- 選択肢 ウ不正解
- add(3) で入れた 3 が消えてしまっているので違います。
- 選択肢 エ正解
- 要素2に 18、要素4に 3、要素5に 11 が正しく入り、{-1, 18, -1, 3, 11} と一致します。
- 選択肢 オ不正解
- 11 が要素3に入っていますが、calcHash2(11) は (14 mod 5)+1 = 5 なので違います。
覚えるポイント
- 要素番号が 1 から始まるため、mod 演算の結果に + 1 を加えている点に留意します。
間違えやすいところ
- 18 + 3 = 21 を5で割った余り(1)の計算ミスや、最後の + 1 を足し忘れに注意しましょう。
出題の前提:令和5年度基本情報技術者試験 科目B 公開問題 問4
出典:IPA『2023年度 科目B 公開問題』
公式問題冊子 p.8 ↗(www.ipa.go.jp) / 公式問題冊子 p.9 ↗(www.ipa.go.jp)
コサイン類似度の計算アルゴリズムの穴埋め
アルゴリズムとプログラミング · コサイン類似度 / 内積 / ベクトルのノルム
二つの配列 vector1, vector2 のコサイン類似度を計算する関数 calcCosineSimilarity において、空欄 a および b に入れる正しい字句の組合せを選べ。なお、コサイン類似度の式は次式で与えられる。 (a1*b1 + a2*b2 + … + an*bn) ÷ (√(a1^2 + a2^2 + … + an^2) * √(b1^2 + b2^2 + … + bn^2))
解答・解説を表示
解答
エ
解説
まず要点:コサイン類似度は、分子が「内積(2つのベクトルの各成分をかけて足したもの)」、分母が「2つのベクトルの長さ(大きさ)をかけたもの」で表されます。内積は各成分の積を順番に足し合わせて作ります。長さは各成分を2乗して足したものの正の平方根で求めます。
解き方
- 分子 numerator を求める最初のループでは、内積をためるために各成分の積 vector1[i] × vector2[i] を足します(a は vector1[i] × vector2[i])。
- 次に vector1 の各成分の2乗を足したものの正の平方根が計算され、denominator に入ります。
- その後、vector2 の各成分の2乗和が temp に求められます。分母 denominator を完成させるには、denominator に √(temp) を掛ける必要があります(b は denominator × (tempの正の平方根))。
- 選択肢 ア不正解
- a で成分の積の平方根をとっており、内積の足し算になっていないため誤りです。
- 選択肢 イ不正解
- a で平方根をとっているうえ、b で長さ(ノルム)同士を足しているため誤りです。
- 選択肢 ウ不正解
- a が誤りであるうえ、b で vector1 の長さが消えてしまうため誤りです。
- 選択肢 エ正解
- a は内積の vector1[i] × vector2[i]、b は長さの積で、数式と一致します。
- 選択肢 オ不正解
- b で分母の長さ同士を足しており、数式の掛け算になっていないため誤りです。
- 選択肢 カ不正解
- b で denominator を使わず、vector1 の長さが無視されるため誤りです。
- 選択肢 キ不正解
- a で vector1[i] の2乗を足しており、内積になっていないため誤りです。
- 選択肢 ク不正解
- a が vector1 の2乗で、b が長さの足し算になっているため誤りです。
- 選択肢 ケ不正解
- a と b のどちらも数式の定義と合っていないため誤りです。
答えの内訳
- a:vector1[i] × vector2[i]
- 分子 numerator はベクトルの内積(各要素の積の総和)を求めるため、各ループで vector1[i] × vector2[i] を加算します。
- b:denominator × (tempの正の平方根)
- 分母は2つのベクトルのノルム(大きさ)の積であるため、既に計算済みの √(Σ vector1[i]^2)(denominator)に、新たに求めた √(Σ vector2[i]^2)(tempの正の平方根)を乗じます。
覚えるポイント
- コサイン類似度 = (A・B) ÷ (|A| × |B|) であり、分母は掛け算です。
間違えやすいところ
- 分母の2つの長さを足し算(+)と見間違えるミスや、分子で平方根をとってしまうミスに注意しましょう。
出題の前提:令和5年度基本情報技術者試験 科目B 公開問題 問5
出典:IPA『2023年度 科目B 公開問題』
公式問題冊子 p.10 ↗(www.ipa.go.jp) / 公式問題冊子 p.11 ↗(www.ipa.go.jp)
複合機の初期設定放置に伴う情報セキュリティリスク
情報セキュリティ · フィッシング / なりすましメール / 初期設定の脆弱性
委託先C社において、複合機のスキャン機能から送信される電子メールの差出人アドレス、件名、本文、添付ファイル名が初期設定のままで運用されており、その初期設定情報がWebサイト上で公開されている。A社が初期設定の変更が必要であると評価した情報セキュリティリスクとして、最も適切なものを選べ。
解答・解説を表示
解答
ア
解説
まず要点:複合機の初期設定(送信元アドレス、件名、本文のひな型)をそのまま使うと、攻撃者に文面をまねされ、なりすましメール(フィッシング)に悪用される危険があります。初期設定はWebサイトで公開されているため、誰でも同じ形式のメールを作れます。従業員が本物の通知だと信じてしまい、偽サイトに誘導されるおそれがあります。
解き方
- 初期設定情報(差出人アドレス、件名、本文)が公開されているため、攻撃者は複合機からの通知メールをそっくりまねた偽メールを簡単に作れます。
- ファイルが大きいときに保存先URLが本文に書かれる運用があるため、従業員は本文中のURLを疑いなくクリックしやすくなります。
- 攻撃者の偽メール内のURLを開いてフィッシングサイトに誘導され、Bサーバなどの利用者IDやパスワードを盗まれることで、個人情報の漏えいにつながります。
- 選択肢 ア正解
- 初期設定をまねた偽メールで従業員がフィッシングに遭い、個人情報が漏れる筋道を正しく述べています。
- 選択肢 イ不正解
- スパムと誤認して削除するのは便利さの問題で、攻撃者に悪用される脅威の本質ではありません。
- 選択肢 ウ不正解
- 添付ファイルはすでに暗号化されて送られており、盗聴して暗号化し身代金を要求する筋道は不自然です。
- 選択肢 エ不正解
- Bサーバへのアクセスには利用者IDとパスワードが必要なので、URLを盗聴しただけでは個人情報は漏れません。
覚えるポイント
- ネットワーク機器や複合機の初期設定の放置は、なりすましや不正アクセスの足がかりとなります。
間違えやすいところ
- BサーバへのアクセスにはIDとパスワードが必要という注記を見落として、選択肢エを選ばないよう注意しましょう。
出題の前提:令和5年度基本情報技術者試験 科目B 公開問題 問6
出典:IPA『2023年度 科目B 公開問題』
公式問題冊子 p.12 ↗(www.ipa.go.jp) / 公式問題冊子 p.13 ↗(www.ipa.go.jp)
2023年度 科目B 公開問題
参照した公式資料
IPAが公開した2023年度 科目B 公開問題の問題・解答資料です。

