Глава 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, без установки