1.5 Математика¶
Математика играет ключевую роль в спортивном программировании. Невозможно стать сильным участником соревнований без хорошей математической базы. В этом разделе собраны важные понятия и формулы, которые дальше будут встречаться в курсе.
Формулы сумм¶
Каждая сумма вида
где \(k\) — положительное целое число, имеет замкнутую формулу (это многочлен степени \(k+1\)).
Например:
(Существует и общая формула для таких сумм — формула Фаульхабера, но она довольно громоздкая.)
Арифметическая прогрессия¶
Арифметическая прогрессия — это последовательность, в которой разность между соседними членами постоянна.
Пример (разность \(+5\)):
4, 9, 14, 19
Сумма арифметической прогрессии вычисляется так:
где \(a\) — первый член, \(b\) — последний, \(n\) — количество членов.
Проверка на примере:
Почему это работает: среднее значение членов прогрессии равно \((a+b)/2\), а членов всего \(n\).
Геометрическая прогрессия¶
Геометрическая прогрессия — это последовательность, в которой отношение соседних членов постоянно.
Пример (знаменатель \(k=3\)):
2, 6, 18, 54
Сумма геометрической прогрессии:
где \(a\) — первый член, \(b\) — последний, \(k\) — знаменатель прогрессии.
Проверка на примере:
Вывод формулы (идея): пусть
Тогда
Вычитая \(S\) из \(kS\), получаем \(kS - S = bk - a\), откуда и следует формула.
Частный случай:
Эта запись особенно часто всплывает при анализе алгоритмов и подсчётах количества состояний.
Функции¶
Функция \(\lfloor x \rfloor\) округляет число \(x\) вниз до целого, а функция \(\lceil x \rceil\) — вверх.
Например:
Функции \(\min(x_1,\dots,x_n)\) и \(\max(x_1,\dots,x_n)\) возвращают соответственно минимальное и максимальное из заданных значений.
Например:
Факториал¶
Факториал \(n!\) можно определить так:
или рекурсивно:
Числа Фибоначчи¶
Числа Фибоначчи встречаются очень часто. Их можно определить рекурсивно:
Первые значения:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, …
Существует и замкнутая формула (формула Бине):
На практике в программировании Фибоначчи почти всегда считают через динамику/быстрое возведение матрицы, а не по этой формуле (из‑за погрешностей при работе с вещественными).
Логарифмы¶
Логарифм числа \(x\) по основанию \(k\) обозначается \(\log_k(x)\). По определению,
Полезная интуиция: \(\log_k(x)\) — это «сколько раз нужно делить \(x\) на \(k\), чтобы получить 1».
Например, \(\log_3(243)=5\), потому что:
243 → 81 → 27 → 9 → 3 → 1.
Логарифмы постоянно встречаются при анализе алгоритмов, где на каждом шаге что‑то делится пополам/на константу (двоичный поиск, быстрые структуры данных и т. п.).
Основные свойства:
- Логарифм произведения:
- Следствие (степень):
- Логарифм частного:
- Переход к другому основанию:
Натуральный логарифм \(\ln(x)\) — логарифм по основанию \(e\approx 2{.}71828\).
Ещё один практический факт: число цифр целого \(x\) в системе счисления по основанию \(b\) равно
Например, число \(200\) в двоичной системе — это \(11001000\), и действительно