正解は イ
ハッシュ関数 h(x) = x mod n において、h(a) = h(b) が衝突の条件。h(a) = a mod n、h(b) = b mod n が等しいとき:a mod n = b mod n、これは a と b の差 (a-b) が n の倍数であることと同値。数式で表すと:a = qn + r、b = pn + r(同じ余りr)とすれば a-b = (q-p)n となり、n が (a-b) を割り切る=「a-b が n の倍数」。選択肢bが正解。衝突が多いと検索効率が低下するため、ハッシュ表のサイズnには素数を選ぶのが一般的。
ハッシュの衝突条件:「a mod n = b mod n」 ⟺ 「(a-b) mod n = 0」 ⟺ 「a-b が n の倍数」。ハッシュ衝突対策:チェイン法(連結リスト)・オープンアドレス法(再ハッシュ)。nを素数にすると衝突が減る理由も理解しておく。