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

応用情報技術者 2018年 秋期 午前227


問題文

自然数を除数とした剰余を返すハッシュ関数がある。値がそれぞれ 571, 1168,1566である三つのレコードのキー値を入力値としてこのハッシュ関数を施したところ、全てのハッシュ値が衝突した。このとき使用した除数は幾つか。

選択肢

193
197
199(正解)
211

自然数を除数とした剰余を返すハッシュ関数の衝突問題【午前2 解説】

要点まとめ

  • 結論:3つのキー値の剰余が同じになる除数は199である。
  • 根拠:剰余が同じなら、キー値の差は除数の倍数であるため、差の最大公約数を求める。
  • 差がつくポイント:複数の差の最大公約数を計算し、選択肢と照合することで正解を導く。

正解の理由

3つのキー値571、1168、1566の剰余が同じなら、それらの差は除数の倍数です。
差を計算すると、1168−571=597、1566−1168=398、1566−571=995です。
これらの最大公約数を求めると199となり、選択肢の中で該当するのはウ: 199です。
したがって、除数は199であり、全てのハッシュ値が衝突した理由が説明できます。

よくある誤解

剰余が同じ=キー値が同じと誤解しがちですが、実際は差が除数の倍数であることが重要です。
また、単に差の一つだけを見るのではなく、全ての差の最大公約数を求める必要があります。

解法ステップ

  1. キー値の差を全て計算する(1168−571、1566−1168、1566−571)。
  2. 計算した差の最大公約数(GCD)を求める。
  3. 選択肢の中からGCDと一致する除数を選ぶ。
  4. その除数で剰余を計算し、衝突が起きることを確認する。

選択肢別の誤答解説

  • ア: 193 → 597や398、995は193で割り切れないため不正解。
  • イ: 197 → 同様に差が197の倍数ではなく不正解。
  • ウ: 199 → 差の最大公約数と一致し、剰余が衝突するため正解。
  • エ: 211 → 差が211の倍数ではないため不正解。

補足コラム

ハッシュ関数で剰余を使う場合、除数はできるだけ素数を選ぶことで衝突を減らす効果があります。
また、複数のキー値で剰余が衝突する場合は、キー値の差の最大公約数が除数の候補となります。
この考え方はハッシュ関数の設計や衝突解析に役立ちます。

FAQ

Q: なぜ差の最大公約数を求めるのですか?
A: 剰余が同じなら差は除数の倍数であり、複数の差の最大公約数が除数の候補になるためです。
Q: 除数は必ず素数でなければなりませんか?
A: 素数を使うことで衝突を減らせますが、必須ではありません。問題の条件に合う除数を選べばよいです。

関連キーワード: ハッシュ関数、剰余演算、最大公約数、衝突、素数
← 前の問題へ次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

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

クイズ画面へ遷移する

すぐに利用可能!

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

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