일반적인 CPU 구조에서 모듈로 연산을 처리하는 것은, 다른 연산들 (덧셈,뺄셈,곱셈,비트연산)에 비해서 매우 느리다. 그래서 모듈로 연산을 회피하는 것이 성능 향상에 중요하다.
간단하고도 널리 알려진 방법은 모듈러스가 2의 거듭제곱꼴일때, 모듈로 연산을 비트 연산으로 대체하는 방법이다.
그것보다는 좀더 복잡하지만, 일반적인 모듈러스 값에 대해서도 모듈로 연산을 다른 연산들로 대체하는 방법들이 있다.
모듈러스가 상수인 경우(컴파일 타임에 값을 알수 있는 경우) 에는 컴파일러가 알아서 나눗셈이나 모듈로연산을 최적화된 연산으로 대체해준다
하지만, 모듈러스 값이 런타임에 주어지는 경우에는 이렇게 컴파일러가 알아서 최적화시켜줄수는 없는데, 이때 컴파일러가 해야 할 작업을 우리가 직접 코드로 구현해줄 수 있다.
잘 활용하면 상당한 속도 향상을 얻을 수 있지만, 이것은 상수최적화에 가까운 영역이지 이론적인 시간복잡도가 향상이 되는 것이 아니라서, PS에서는 보통 잘 다뤄지는 내용은 아니다.
그리고, Python에서는 이러한 기법들이 실제 속도향상에 도움이 되지 않는다.
Python에서는 애초에, 나머지 연산이 비트연산이나 덧셈 등과 비교해서 속도 차이가 크지 않다. 실제 연산에 걸리는 시간보다, 값을 참조해서 가져오고 하는 오버헤드가 훨씬 크기 때문에, 실제 연산의 시간 차이는 전체 시간에서 별로 비중이 크지 않다.
따라서, 연산 종류에 관계 없이 그냥 연산 횟수가 늘어나면 시간도 더 늘어난다고 생각하는 것이 편하다..
알려진 알고리즘은 Barret reduction과 Montgomery reduction이 있다.
공통적으로 모듈러스 값이 고정되어 있는 상황에서 반복적으로 모듈로 연산을 할때 효율적이다.