Несколько способов ускорить вычисления модульных значений в программировании:
- Использовать «уменьшение Барретта» или «уменьшение Монтгомери». stackoverflow.com Они предполагают предварительное вычисление констант, связанных с модулем, чтобы остаток можно было найти с помощью умножения и сдвига без необходимости деления. stackoverflow.com
- Проводить «ленивое приведение по модулю». habr.com Переменные нужно возвращать к системе наименьших вычетов прямо перед выполнением деления, а все промежуточные вычисления вести с приближёнными значениями. habr.com
- Использовать сложение вместо вычитания. habr.com Сложение многоразрядных чисел требует меньше инструкций по сравнению с вычитанием. habr.com
Также для ускорения вычислений в целом можно использовать векторизованные операции, например, с помощью библиотеки NumPy, или JIT-компиляцию с помощью библиотеки Numba. dzen.ru pythonspeed.com