Все темы
136

Быстрое возведение в степень

Tier 1Закрыто

Где применяется

1. Задача

Шаг 135 искал простые числа и тратил меньше работы на каждое число. Здесь мы тратим меньше работы на каждую степень. Нужно посчитать base^exp: основание base, умноженное само на себя exp раз. Когда exp маленькое, можно просто умножать. Когда exp равно миллиону или миллиарду, умножение по одному шагу означает миллион или миллиард операций.

Есть и вторая проблема. У числа 21000000 больше 300 000 цифр. Обычное целое столько не вмещает, да такое число обычно и не нужно: задача просит ответ по модулю некоторого числа m, то есть остаток от деления на m. Значит, нужно посчитать base^exp mod m так, чтобы промежуточные числа оставались маленькими, а шагов было намного меньше, чем exp.

Этот шаг из платной части

Бесплатные шаги в начале курса (их 33) открыты всем: урок, задача и тесты. Этот шаг открывается с полным доступом. Начни с бесплатного аккаунта и бесплатных шагов.

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

На LeetCode

Задачи, где число возводят в огромную степень, часто с остатком. Возведение основания в квадрат и деление степени пополам дают O(log n) шагов там, где простое умножение даёт n. Когда модуль около 10^9, квадраты превышают 2^53, и как с этим быть, показывает урок 137.

Мы используем необходимые куки для работы сайта (вход и язык). Если ты согласишься, мы также загрузим Google Analytics, чтобы видеть, какие страницы читают, и Google reCAPTCHA для защиты форм обратной связи и сообщений об ошибке от спама. Политика конфиденциальности