If you're seeing this message, it means we're having trouble loading external resources on our website.

Если вы используете веб-фильтр, пожалуйста, убедитесь, что домены *.kastatic.org и *.kasandbox.org разблокированы.

Основное содержание

Возведение в степень по модулю

Наконец, давайте рассмотрим экспоненциальное свойство.
A^B mod C = ( (A mod C)^B ) mod C
Часто нам бывает нужно вычислить A^B mod C для больших значений B.
К сожалению, A^B очень быстро растёт даже для довольно маленьких значений B.

Например:

2^90 = 1 237 940 039 290 000 000 000 000 000
7^256 = 2 213 595 400 050 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 83 794 038 078 300 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 721 264 246 243 000 000 000 000 000
А для больших значений калькуляторы и компьютеры могут выдать ошибку переполнения.
Даже если мы не получили ошибку, вычисление модуля таких огромных чисел может занять очень много времени.

Что сделать, чтобы уменьшить использующиеся числа и ускорить вычисления?

Представьте, что нам нужно вычислить 2^90 mod 13, но наш калькулятор не умеет работать с числами, больше чем 2^50.
Тут вступает в дело простая стратегия разделяй и властвуй:
разбей на меньшие части
правила возведения в степень
2^90 = 2^50 * 2^40
mod C
каждая часть
2^50 mod 13 = 1125899906842624 mod 13 = 4
2^40 mod 13 = 1099511627776 mod 13 = 3
воспользуйся свойствами умножения
собери части
2^90 mod 13 = (2^50 * 2^40) mod 13
2^90 mod 13 = (2^50 mod 13 * 2^40 mod 13) mod 13
2^90 mod 13 = ( 4 * 3 ) mod 13
2^90 mod 13 = 12 mod 13
2^90 mod 13 = 12

Как быстро вычислить A^B mod C, если B представляет собой степень 2?

Как вычислить 7^256 mod 13 при помощи калькулятора, который работает только с числами, меньшими чем 7^10?
Можно разбить 7^256 на 25 частей по 7^10 и 1 часть по 7^6, но это не самое лучшее решение.
Есть способ лучше…

Хотите присоединиться к обсуждению?

Пока нет ни одной записи.
Знаете английский? Нажмите здесь, чтобы увидеть обсуждение, которое происходит на английской версии сайта.