Skip to main content

Command Palette

Search for a command to run...

A step-by-step look at fast exponentiation

Updated
•2 min read•View as Markdown

Разложим решение на шаги и объясним, что происходит на каждом из них.

Задача

Вычислить base ** exp двумя способами: простым умножением и алгоритмом быстрого возведения в степень.

Решение

def power(base: int, exp: int) -> int:
    result = 1
    for _ in range(exp):
        result *= base
    return result


def fast_power(base: int, exp: int) -> int:
    result = 1
    while exp > 0:
        if exp % 2 == 1:
            result *= base
        base *= base
        exp //= 2
    return result


print(power(2, 10), fast_power(2, 10))

Как это работает

Быстрый метод использует двоичное представление показателя: показатель делится на два, а основание возводится в квадрат. Число умножений падает с exp до log2(exp).

Пример работы

1024 1024

Сложность

O(exp) против O(log exp).

Разбор по шагам

  1. Шаг 1. Входные данные. Проверяем, что приходит в функцию, и какие значения считаются корректными.
  2. Шаг 2. Основной цикл. Именно здесь происходит вся работа; следим за изменениями переменных на каждой итерации.
  3. Шаг 3. Результат. Убеждаемся, что возвращаемое значение соответствует условию задачи, включая крайние случаи.

Читая чужой код, повторите тот же мысленный разбор по шагам — это самый быстрый способ научиться.

Читайте также:

задачи · return · крайние · Задача · мысленный · падает · приходит · умножением · условию · шагам · Входные · значение · Именно · Быстрый · умножений · случаи · корректными · Пример · самый · квадрат · Читая · Разбор · какие · основание · каждой · переменных · происходит · решение · представление

More from this blog

N

News

776 posts