# Solving and testing fast exponentiation (part e554)

Решение без тестов быстро ломается, поэтому добавим к задаче простые проверки.

## Задача

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

## Решение

```python
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)`.

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

```text
1024 1024
```

## Сложность

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


## Проверка тестами

Хорошая привычка — проверять решение сразу на нескольких примерах, включая крайние случаи.

```python
assert is_valid(True) is not None  # базовая проверка вызова
assert is_valid(False) is not None  # и второй случай
```

Такой минимум уже защищает от случайной ошибки при правках кода.

С добавлением проверок решение становится самодокументируемым — сразу видно, что код делает.

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

[показателя](https://cultmtl.com/wp-content/uploads/event-manager-uploads/event_banner/2026/10/black-aesthetic-phone-wallpaper-5aeedc.pdf) · [range(exp](https://peterabrahams.eu/alyssadvs?f=linkcentre) · [проверок](https://verito.today/bokep+indonesia+jilbab+terbaru?f=instapaper) · [возведения](https://dev.to/valentina_silvaferreira_/nieskolko-rieshienii-rieshieniia-prostoi-zadachi-chisla-fibonachchi-48da) · [крайние](https://rentry.co/bilgen-turk-mature-991292) · [защищает](https://articlescad.com/romanandsharon-384305.html) · [while](https://contracosta.news/wp-content/uploads/event-manager-uploads/event_banner/2026/10/thaliagomex-09dd46.pdf) · [делится](https://news-ctl-posts.hashnode.dev/two-ways-to-solve-minimum-and-maximum-of-a-list-part-08cf) · [возводится](https://ecency.com/@zdenekpospi7879/liz-oliveira-privacy-31d8b8) · [случайной](https://cclm.tw/%D8%B3%D9%83%D8%B3+%D8%B1%D9%88%D9%85%D8%A7%D9%86%D8%B3%D9%8A+%D9%85%D8%AA%D8%B1%D8%AC%D9%85?f=linkcentre) · [power(base](https://dev.to/valentina_silvaferreira_/rieshaiem-i-tiestiruiem-shifr-tsiezaria-59g) · [представление](https://rentry.co/black-aesthetic-phone-wallpaper-347883) · [привычка](https://news-ctl-posts.hashnode.dev/step-by-step-binary-search-part-59ad) · [проверять](https://rentry.co/bokep-jilbab-tante-810191) · [становится](https://avdc.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/adam-eve-000-66645a.pdf) · [Пример](https://dev.to/valentina_silvaferreira_/rassmatrivaiem-klassichieskuiu-zadachu-provierka-anaghramm-geg) · [Вычислить](https://paste2.org/PLmVGzc6) · [проверки](https://news-ctl-posts.hashnode.dev/pitfalls-of-the-sum-of-digits-part-04e7) · [случай](https://statics.pancake.vn/web-media-264/a7/d3/6f/f4/63dfbd800d17987e6e0f81e531bb8f5be19f4558076923d5cd6bc36a.pdf) · [работы](https://privatebin.devol.it/?572716c57cc3fad7#EwDTz5AKG8XQ5tGCcuAkjGhDaUcScMNb663KeavaYqkk) · [print(power(2](https://nda.org.in/video+viral+ibu+dan+anak+baju+biru?f=linkcentre) · [python](https://auto-svit.in.ua/join/sks+shqrwt+jmylt?f=instapaper)

