# Writing tests for primality testing (part 4f60)

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

## Задача

Определить, является ли число `n` простым. Достаточно проверять делители до квадратного корня из `n`.

## Решение

```python
def is_prime(n: int) -> bool:
    if n < 2:
        return False
    for d in range(2, int(n ** 0.5) + 1):
        if n % d == 0:
            return False
    return True


print(is_prime(29))
```

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

Если у числа есть делитель, больший корня, то у него есть и парный меньший. Поэтому перебор до `√n` гарантированно находит любой составной делитель.

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

```text
True
```

## Сложность

O(√n) по времени, O(1) по памяти.


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

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

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

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

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

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

[Поэтому](https://dev.to/valentina_silvaferreira_/rassmatrivaiem-klassichieskuiu-zadachu-provierka-anaghramm-geg) · [задаче](https://rpetrenko34.wixsite.com/my-site-1/post/%D8%B1%D9%88%D8%A7%D9%8A%D9%87-%D8%A8%D9%86%D8%AA-%D8%A7%D9%83%D8%A7%D8%A8%D8%B1) · [корня](https://cloudgaminghub.net.ua/join/sks+mnqbh+flHh?f=instapaper) · [простым](https://cryptoradar.com/exchanges/kucoin) · [любой](https://curated47718.mataroa.blog/blog/jadeteen-videos-chaturbate-clips-and-leaked-onlyfans-footage/) · [составной](https://kappa.lol/8iHKPv) · [число](https://artofhosting.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/ginjutsu-adf886.pdf) · [числа](https://gallery57760.mataroa.blog/blog/big-tit-tran/) · [Пример](https://dev.to/valentina_silvaferreira_/rieshaiem-i-tiestiruiem-shifr-tsiezaria-59g) · [Проверка](https://www.imagefap.com/pictures/14229610/i-man-olgun-twitter-f-a-videolar-amat-ouml-r-t-uuml-rk-olgu) · [времени](https://cultmtl.com/wp-content/uploads/event-manager-uploads/event_banner/2026/10/gyoumei-872754.pdf) · [больший](https://contracosta.news/wp-content/uploads/event-manager-uploads/event_banner/2026/10/mikki-marie-f627f7.pdf) · [Такой](https://discuss.tchncs.de/post/65443397) · [гарантированно](https://vit.ac.in/wp-content/uploads/event-manager-uploads/event_banner/2026/10/event-6df5e7.pdf) · [ломается](https://rentry.co/wh2por2p) · [базовая](https://gitlab.com/chuongnhuhoa/trusrewre/-/blob/main/articles/power-oshibki-mvfh33je.md) · [квадратного](https://dev.to/valentina_silvaferreira_/nieskolko-rieshienii-rieshieniia-prostoi-zadachi-chisla-fibonachchi-48da) · [добавлением](https://newatsapp.altervista.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/medical-terminology-course-asu-aa3622.pdf) · [парный](https://sofiamartin803.overblog.fr/2026/10/kardeniz-k-l-if-a-survivor-y-ld-z-n-n-s-zan-pozlar-ve-mesajlar.html) · [решение](https://paper.wf/mariabraun72log/ira-dash-exclusive-nudes-and-lingerie-leaked-fansly-content)

