Глава 5 · Давайте поиграем с числами!

gcd, lcm, факториал, comb, perm

Пять функций для работы с целыми числами и подсчёта вариантов — с реальными задачами для каждой.

gcd() — наибольший общий делитель

Наибольший общий делитель (НОД) двух чисел — самое большое число, на которое оба делятся без остатка. Классическое применение — сокращение дробей:

gcd.py
import math

print(math.gcd(12, 18))   # 6 — и 12, и 18 делятся на 6 без остатка

# сократить дробь 12/18:
chislitel, znamenatel = 12, 18
nod = math.gcd(chislitel, znamenatel)
print(f"{chislitel // nod}/{znamenatel // nod}")   # 2/3 — та же дробь, но в простейшем виде

lcm() — наименьшее общее кратное

Наименьшее общее кратное (НОК) — наименьшее число, которое делится на оба числа сразу. Пригодится, например, чтобы понять, когда снова совпадут два повторяющихся события:

lcm.py
import math

print(math.lcm(4, 6))   # 12 — автобус №1 ходит каждые 4 минуты, автобус №2 — каждые 6
                        # оба будут на остановке одновременно каждые 12 минут

factorial() — считаем перестановки

Факториал n! — произведение всех целых чисел от 1 до n. Отвечает на вопрос «сколькими способами можно расставить n разных предметов по порядку»:

factorial.py
import math

print(math.factorial(5))   # 120 — 5 книг на полке можно расставить 120 разными способами

comb() и perm() — выбор и порядок

comb(n, k) — сколькими способами выбрать k предметов из n, если порядок выбора не важен. perm(n, k) — то же самое, но когда порядок важен.

comb_perm.py
import math

# сколько разных троек чисел можно выбрать из лотерейных 49, не важен порядок:
print(math.comb(49, 3))   # 18424

# сколько разных подиумов (1, 2, 3 место) можно составить из 10 бегунов, порядок важен:
print(math.perm(10, 3))   # 720
perm() всегда больше или равен comb()
Для одних и тех же n и k perm() считает КАЖДЫЙ порядок отдельно, а comb() — только уникальные наборы. Если сомневаетесь, какую функцию использовать, задайте себе вопрос: «важен ли порядок?» — да → perm(), нет → comb().
Практика: gcd, lcm, факториал, comb, perm
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →