Skip to main content

Command Palette

Search for a command to run...

Two ways to solve 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).

Альтернативный подход

Ту же задачу часто решают иначе: например, через рекурсию вместо цикла или через стандартную библиотеку вместо ручной реализации. Альтернатива обычно короче, но первое «ручное» решение лучше показывает механику работы алгоритма. Полезно написать оба и сравнить на одинаковых тестах.

Оба подхода рабочие; важно понимать цену каждого, а не копировать первый попавшийся.

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

log2(exp · библиотеку · Полезно · например · алгоритмом · обычно · умножений · вместо · написать · сравним · падает · стандартную · понимать · учебных · двоичное · одинаковых · способами · возведения · Альтернативный · простым · рабочие

More from this blog

N

News

4033 posts