戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

基本情報技術者 2010年 秋期 午前(科目A)07


問題文

5けたの数を、ハッシュ法を用いて配列に格納したい。 ハッシュ関数をmod( + + + + , 13) とし、求めたハッシュ値に対応する位置の配列要素に格納する場合、54321は次の配列のどの位置に入るか。 ここで、mod(, 13) の値は、を13で割った余りとする。
基本情報技術者 2010年 秋期 午前(科目A) 問07の問題画像

選択肢

1
2(正解)
7
11

5けたの数のハッシュ配置(各桁和を13で除した余り)【午前2 解説】

要点まとめ

  • 結論:54321の各桁の和はであり、のため配列位置は2になります。
  • 根拠:ハッシュ関数はmod(各桁の和,13)で定義され、求めた余りがそのまま配列のインデックスとなるルールです。
  • 差がつくポイント:桁和を取ることと0始まりのインデックス(0~12)を使う点を混同しないのが得点差になります。

正解の理由

54321の各桁を足すと です。ハッシュ関数は mod(15,13) を求めますから、 となり、配列の位置は「2」になります。従って正解は です。
正解:

よくある誤解

  • 各桁の合計ではなく数値自体に対してmodを取る(54321 mod 13)してしまう誤り。問題文の定義を確認すること。
  • インデックスを1始まりで考え「位置1」とするミス。配列位置が0から0~12である点を見落とす受験者が多いです。
  • 余りの計算で符号やマイナスを誤って扱う(本問では非該当だが一般のmod問題でミスしやすい)点。

解法ステップ

  1. 数字54321を桁ごとに分解する(5,4,3,2,1)。
  2. 各桁の和を求める:
  3. その和を13で割った余りを計算する:
  4. 得られた余りが配列の格納位置となる(答え:位置2)。
参考の簡易計算(Python例)
n = 54321
digits = [int(d) for d in str(n)]
s = sum(digits)            # 15
pos = s % 13               # 2
print(pos)                 # 2

選択肢別の誤答解説

  • ア: 1 — 各桁和の計算やmodの誤りで15を13で割った余りを1と誤認した可能性。正しくは2です。
  • : 2 — 正解。で位置2に格納されます。
  • ウ: 7 — 例えば桁の配置を逆にして計算したり、別のハッシュ規則(桁の重み付けなど)を誤適用した結果の誤答です。
  • エ: 11 — 余りの計算を間違えた、もしくは13から差を取るなどの誤った手順によるミスです。

補足コラム

桁和を用いるハッシュは実装が簡単ですが、衝突(異なる数が同じ桁和になる)を起こしやすい点に注意が必要です。より良い分布を得たい場合は、桁に重み付けをして多項式的に評価する手法(例えばローリングハッシュ)や、表のサイズと素数の選定、衝突解決(チェイン法やオープンアドレッシング)を検討します。

FAQ

Q1: modの結果はどの範囲になりますか?
A1: 0以上12以下(13個)の整数になります。本問では0~12のインデックスに対応します。
Q2: もし結果が0ならどこに入りますか?
A2: 位置0に格納します。配列が0始まりであるため余り0は有効なインデックスです。
Q3: 桁和ではなく元の数値を使った場合は?
A3: 問題定義が異なるため、必ず問題文に従ってどの値にmodを適用するかを確認してください。

関連キーワード: ハッシュ法、剰余演算、mod計算、配列インデックス、桁和、衝突、ハッシュ分布、チェイン法、オープンアドレッシング
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

基本情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について