Причина, по которой используются простые числа, состоит в том, чтобы минимизировать коллизии, когда данные демонстрируют некоторые конкретные закономерности.
Перво-наперво: если данные случайные, тогда нет необходимости в простом числе, вы можете выполнить операцию мода для любого числа, и у вас будет одинаковое количество столкновений для каждого возможного значения модуля.
Но когда данные не случайны, происходят странные вещи. Например, рассмотрим числовые данные, которые всегда кратны 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 мод 7 = 3
20 мод 7 = 6
30 мод 7 = 2
40 мод 7 = 4
50 мод 7 = 1
и т.д
Мы также отмечаем, что 5 не является хорошим выбором, но 5 простое, потому что все наши ключи кратны 5. Это означает, что мы должны выбрать простое число, которое не делит наши ключи, выбор большого простого числа обычно достаточно.
Таким образом, ошибочная сторона повторения приводит к тому, что простые числа используются для нейтрализации влияния шаблонов в ключах при распределении коллизий хэш-функции.