a % N = x
означает, что для некоторых целых чисел 0 <= x < N
и m
: m * N + x = a
.
Вы можете просто сделать вывод, что если a % N = x
и b % N = y
, то
(a + b) % N =
= (m * N + x + l * N + y) % N =
= ((m + l) * N + x + y) % N =
= (x + y) % N =
= (a % N + b % N) % N.
Мы знаем, что 0 < x + y < 2N
, поэтому вам нужно вести подсчет остатка. Это показывает, что можно разделить суммирование и вычислить остатки отдельно, а затем добавить их, но не забудьте получить остаток от суммы.
Для умножения:
(a * b) % N =
= ((m * N + x) * (l * N + y)) % N =
= ((m * l + x * l + m * y) * N + x * y) % N =
= (x * y) % N =
= ((a % N) * (b % N)) % N.
Таким образом, вы можете сделать то же самое с продуктами.
Эти свойства могут быть просто получены в более общем виде с использованием некоторой абстрактной алгебры (остатки образуют кольцо факторов Z/nZ
).