Причина использования простых чисел состоит в том, чтобы минимизировать коллизии, когда данные демонстрируют определенные особенности.
Перво-наперво: если данные случайные, тогда нет необходимости в простом числе, вы можете сделатьработайте с любым числом, и вы будете иметь одинаковое количество столкновений для каждого возможного значения модуля.
Но когда данные не случайны, происходят странные вещи.Например, рассмотрим числовые данные, которые всегда кратны 10.
Если мы используем мод 4, мы находим:
10 мод 4 = 2
20 мод 4 = 0
30 мод 4 = 2
40 мод 4 = 0
50 мод 4 = 2
Таким образом, из 3 возможных значений модуля (0,1,2,3) только 0 и 2 будут иметь коллизии, что плохо.
Если мы используем простое число, например 7:
10 mod 7 = 3
20 мод 7 = 6
30 мод 7 = 2
40 мод 7 = 4
50 мод 7 = 1
и т. Д.
Мы также отмечаем, что 5 не является хорошим выбором, но 5 простое, потому что все наши ключи кратны 5. Это означает, что мы должны выбрать простое число, которое не делит наши ключи, выбирая большое простое числообычно достаточно.
Таким образом, из-за повторяемости, причина использования простых чисел состоит в том, чтобы нейтрализовать влияние шаблонов в ключах при распределении коллизий хеш-функции.