Mikhail Levin
Искусственный Интеллект
(615567)
10 лет назад
вообще-то все просто.
числа по модулю образуют кольцо (а по простому - даже поле), то есть - нормальную арифметику. Модуль можно брать на любом этапе.
конечно, посчитать сначала 18^180, а потом взять (mod 13) - это долго (хотя на компе вполне реально, до нескольких миллионов знаков длинная арифметика считается несложно). Но можно брать модуль на каждом шаге!
например, 18^180 mod 13 = (18mod 13)^180 mod 13=5^180 mod 13.
теперь, как возводить в высокую степень (не обязательно по мудулю):
a^180=a^(4+16+32+128)
считаем и запоминаем промежуточные результаты
a^2=a*a
a^4=(a^2)(a^2)
a^8=(a^4)(a^4)
a^16=(a^4)(a^4)
a^32=(a^16)(a^16)
a^64=(a^32)(a^32)
a^128=(a^64)(a^64)
итого a^180=a^4 * a^16 * a^32 * a^128
если надо считать по модулю 13 - делаем каждую операцию по модулю 13, все числа - небольшие, не больше 12.
если немного подумать, то разложение a^180=a^(4+16+32+128) - это просто двоичное представление числа, 4,16,32,128 - единички, остальные - нули.