Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Остаток от деления больших чисел

Елжан Базархан Профи (690), на голосовании 10 лет назад
Как можно вычислить остаток от деления таких чисел как 10^7 mod 23 или 18^180 mod 13 т. д. Можете показать агоритм?
Голосование за лучший ответ
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 - единички, остальные - нули.

Похожие вопросы