# Writing tests for primality testing (part cd37)

Посмотрим на задачу глазами разработчика: сначала решение, затем убеждаемся в его корректности.

## Задача

Определить, является ли число `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  # и второй случай
```

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

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

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

[любой](https://avdc.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/olgun-kad-n-pornosu-twitter-6ff96b.pdf) · [корня](https://dev.to/valentina_silvaferreira_/rieshaiem-i-tiestiruiem-shifr-tsiezaria-59g) · [Определить](https://cultmtl.com/wp-content/uploads/event-manager-uploads/event_banner/2026/10/lararoseb-leaks-9fb090.pdf) · [памяти](https://news-ctl-posts.hashnode.dev/a-step-by-step-look-at-primality-testing-part-67f7) · [Достаточно](https://rpetrenko34.wixsite.com/my-site-1/post/%D8%B3%D8%A7%D9%84%D8%A8-%D9%86%D8%A7%D8%B9%D9%85-%D8%AA%D9%88%D9%8A%D8%AA%D8%B1-%D8%B5%D9%88%D8%B1-%D9%88%D9%85%D9%86%D8%B4%D9%88%D8%B1%D8%A7%D8%AA-%D9%85%D9%86-%D8%AD%D8%B3%D8%A7%D8%A8%D8%A7%D8%AA-%D8%B9%D8%B1%D8%A8%D9%8A%D8%A9-%D9%85%D8%AA%D9%86%D9%88%D8%B9%D8%A9) · [больший](https://contracosta.news/wp-content/uploads/event-manager-uploads/event_banner/2026/10/barelylegalteens-3b97aa.pdf) · [range(2](https://parok.by/%D1%8D%D0%BA%D1%80%D0%B0%D0%BD-%D0%B4%D0%BB%D1%8F-%D0%B1%D0%B0%D0%BD%D0%BD%D0%BE%D0%B9-%D0%BF%D0%B5%D1%87%D0%B8-%D0%B8%D0%B7-%D0%BD%D0%B5%D1%80%D0%B6%D0%B0%D0%B2%D0%B5%D0%B9%D0%BA%D0%B8?f=instapaper) · [разработчика](https://www.sfahba.com/wp-content/uploads/event-manager-uploads/event_banner/2026/10/peel-and-stick-wallpaper-gothic-9fda02.pdf) · [Такой](https://gitlab.com/chuongnhuhoa/trusrewre/-/blob/main/articles/caesar-dva-sposoba-mvcprqnq.md) · [квадратного](https://rentry.co/qkwwif83) · [случаи](https://hey.xyz/posts/38xqm08fhq7tgqkkc2) · [работает](https://dev.to/valentina_silvaferreira_/rassmatrivaiem-klassichieskuiu-zadachu-provierka-anaghramm-geg) · [Хорошая](https://articlescad.com/aarohi-dike-hot-382624.html) · [нескольких](https://cultmtl.com/wp-content/uploads/event-manager-uploads/event_banner/2026/10/amirahdyme-edfbdb.pdf) · [False](https://ivanpetrenko.wixsite.com/my-site-1/post/%D0%BA%D1%80%D0%B0%D1%81%D0%BD%D1%8B%D0%B5-%D1%82%D0%BE%D1%87%D0%BA%D0%B8-%D0%BD%D0%B0-%D0%B3%D0%BE%D0%BB%D0%BE%D0%B2%D0%BA%D0%B5-%D0%B8-%D0%B7%D1%83%D0%B4-%D0%BF%D1%80%D0%B8%D1%87%D0%B8%D0%BD%D1%8B-%D0%B8-%D0%BB%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5) · [фреймворков](https://rentry.co/onlybadkatt-541212) · [числа](https://drop.xtrafrancyz.net/selif/6nhsp42399.pdf) · [базовая](https://dev.to/valentina_silvaferreira_/nieskolko-rieshienii-rieshieniia-prostoi-zadachi-chisla-fibonachchi-48da) · [минимум](https://contracosta.news/wp-content/uploads/event-manager-uploads/event_banner/2026/10/www-indian-xxx-video-b645ea.pdf) · [вызова](https://newatsapp.altervista.org/wp-content/uploads/event-manager-uploads/event_banner/2026/10/max-bae8a7.pdf) · [перебор](https://hey.xyz/posts/vafcvkw02y815gpja8) · [случай](https://blogfreely.net/nataliarussell2/evaafanss) · [удобны](https://blogfreely.net/igorcollins26/randomtriples)

