# Writing tests for fast exponentiation

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

## Задача

Вычислить `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  # и второй случай
```

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

Тесты вида assert удобны для учебных задач: они короткие, наглядные и не требуют фреймворков.

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

[степень](https://rentry.co/victoriahjt-722500) · [проверять](https://radicle.network/nodes/seed.pipapo.org/rad%3Az4UBiic3ioPccvEx5qWL6Cz2GU5tf/issues/6d54fd5698fd014b3f898849eb30c6bc41c3cec3) · [O(exp](https://wuchu-pub.com/uploads/20261015/b8161cbe810e7e7abf48d2aa6aa7a18c.pdf) · [задач](https://radicle.network/nodes/seed.pipapo.org/rad%3AzUyYuoBNTcKW1rV7pHR2HBYXhnZw/issues/d70e9f7ab0e6155b0414730d67e880783199268b) · [Вычислить](https://cryptoradar.com/exchanges/bit2me) · [случайной](https://gellaryforum.freeflarum.com/d/28346-28346-kashmiri-girls-xxx-videos-free-desi-porn-galleries) · [задаче](https://wuchu-pub.com/uploads/20261015/21f998907269f3d9c12044e4168ed940.pdf) · [range(exp](https://drop.xtrafrancyz.net/selif/vib42c8vn7.pdf) · [квадрат](https://dev.to/valentina_silvaferreira_/rieshaiem-i-tiestiruiem-shifr-tsiezaria-59g) · [print(power(2](https://paste.rs/N1qUd) · [быстро](https://collection39265.mataroa.blog/blog/08a-df-2aa/) · [умножением](https://juliamichel523.overblog.fr/2026/10/betrayed-1x1x1x1-r34.html) · [падает](https://dev.to/valentina_silvaferreira_/rassmatrivaiem-klassichieskuiu-zadachu-provierka-anaghramm-geg) · [привычка](https://cadec.mx/cibertec-comunicaci%C3%B3n-audiovisual?f=instapaper) · [assert](https://avdc.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/event-5cc5ae.pdf) · [представление](https://avdc.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/anal-and-facial-78e3e1.pdf) · [простым](https://news-ctl-posts.hashnode.dev/common-mistakes-in-factorial-computation) · [while](https://dev.to/valentina_silvaferreira_/nieskolko-rieshienii-rieshieniia-prostoi-zadachi-chisla-fibonachchi-48da) · [двоичное](https://radicle.network/nodes/index.radicle.garden/rad%3AzwC16xAq6afVSGLyH25o6GyE7dxE/issues/321a0d927b26b456b1802e661df161d10d553982) · [добавим](https://avdc.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/lunarase-c0db6e.pdf) · [правках](https://cultmtl.com/wp-content/uploads/event-manager-uploads/event_banner/2026/10/login-0e4a1e.pdf) · [наглядные](https://blog.spikyhair.club/oz9f8476/yeonyein-dibpeikeuyadong) · [работы](https://loc.edu/wp-content/uploads/event-manager-uploads/event_banner/2026/10/porn-5f4200.pdf) · [Быстрый](https://statics.pancake.vn/web-media-264/03/75/f4/44/e0c07a68abdfc2790724f0d6ad41b8034227e98868648900d58e53f7.pdf) · [возводится](https://leahlaurent527.overblog.fr/2026/10/thechickengirl-sf.html) · [O(log](https://coldbrew8177.bearblog.dev/)

