Skip to main content

Exploring fast exponentiation (part 34b6)

Updated 1 min readMarkdown

Разберём задачу, которая встречается практически в каждом учебнике по программированию.

Задача

Вычислить 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).

Такой пример хорошо закрепляется практикой — перепишите решение руками и прогоните на своих тестах.

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

встречается · Разберём · показатель · result · своих · быстрого · показателя · простым · log2(exp · перепишите · power(base · Сложность · print(power(2 · прогоните · программированию · Число · которая · возводится · руками · умножением · Пример · Задача · практикой · Вычислить · практически · использует · range(exp

No comments yet. Be the first to comment.

More from this blog