Евгений и Расмус дают отличные ответы. Чтобы добавить к этому, не забудьте использовать последовательный квадрат для сил. То есть, напишите показатель степени, скажем E
, в базе 2
:
E = b0*1 + b1*2 + ... + bk*2^k
, где каждый bi
равен либо 0
, либо 1
, а bk = 1
- последний ненулевой бит. Затем вы можете поднять число, скажем N
, до показателя E
на
N^E (mod m) = n0^b0 * n1^b1 * ... * nk^bk (mod m)
, где
n0 = N (mod m)
n1 = n0^2 (mod m)
n2 = n1^2 (mod m)
...
nk = n(k-1)^k (mod m)
Например, для вычисления 28^27 mod 76
у вас есть N = 28
, E = 27
, m = 76
, и вычисление составляет
27 = 1 + 2 + 8 + 16
E = b0 + b1 + b3 + b4
и
n0 = 28 (mod 76)
n1 = 28^2 (mod 76) = 24
n2 = 24^2 (mod 76) = 44
n3 = 44^2 (mod 76) = 36
n4 = 36^3 (mod 76) = 4
и наконец
28^27 (mod 76) = 28 * 24 * 36 * 4 (mod 76) = 20
N^ E (mod m) = n0 * n1 * n3 * n4 (mod 76)