素数が使用される理由は、データが特定のパターンを示すときの衝突を最小限にするためです。
まず最初に:データがランダムである場合、素数の必要はありません。任意の数に対してmod操作を実行でき、係数の可能な値ごとに同じ数の衝突が発生します。
しかし、データがランダムでない場合、奇妙なことが起こります。たとえば、常に10の倍数である数値データについて考えます。
mod 4を使用すると、次のことがわかります。
10 mod 4 = 2
20 mod 4 = 0
30 mod 4 = 2
40 mod 4 = 0
50 mod 4 = 2
したがって、係数の可能な3つの値(0、1、2、3)から、0と2だけが衝突することになりますが、これは悪いことです。
7のような素数を使用する場合:
10 mod 7 = 3
20 mod 7 = 6
30 mod 7 = 2
40 mod 7 = 4
50 mod 7 = 1
等
また、5は良い選択ではありませんが、5は素数です。理由は、すべてのキーが5の倍数であるためです。つまり、キーを分割しない素数を選択する必要があります。大きな素数を選択すると、通常は十分です。
したがって、素数が使用される理由を繰り返しているという誤解は、ハッシュ関数の衝突の分布におけるキーのパターンの影響を中和することです。