Во первых, модуль P должен быть простым.
Объяснение: H mod P = a, если P - простое, то мы получаем полное количество вычетов - количество различных значений A будет равно P (0...P-1). Если P - составное, то будут коллизии. Это следует из теоремы Эйлера.
В статье говорится как взламываются хэши с P = 2^64, которое явно не простое :)
В вторых, чем больше P, тем лучше, т.к. больше значений хэшей. Обычно берут (10^9)+7
В олимпиадном программировании этого хватает.
В третьих (не для олимпиад), можно дублировать вычисления хэшей для нескольких модулей P1,P2,P3
Вероятность что все три хэша дадут коллизию практически невероятна, но возможна.