Как рассчитать модуль вида (a * b)% c? - PullRequest
5 голосов
/ 06 мая 2011

Как рассчитать модуль формы (a * b)% c?

Я хочу вычислить модуль умножения двух чисел типа int, где они почти находятся в стадии переполнения ...

здесь c также int

Ответы [ 3 ]

15 голосов
/ 06 мая 2011
(a * b) % c == ((a % c) * (b % c)) % c
7 голосов
/ 06 мая 2011

А как насчет ((a % c) * (b % c)) % c? В зависимости от вашей архитектуры это может быть быстрее или медленнее, чем приведение к большему типу.

5 голосов
/ 06 мая 2011

Вы можете разыграть a и c до long long, поэтому умножение не будет переполнено.

((long long)a * (long long)b) % c
...