Теория
Что нужно знать
Задание 15 проверяет алгебру логики на числовой прямой: отрезки, множества, делимость и поразрядные операции. В базе Kompege по этой теме 1 367 задач, 75 решений (69 программных и 6 текстовых) и 285 видеоразборов (193 YouTube, 53 VK, 39 Rutube). В 2027 году тема сохраняется без изменения номера.
Логические операции
Формула задания — это высказывание о числе x. Сначала расставьте операции по приоритету: отрицание, конъюнкция, дизъюнкция, импликация, эквивалентность. Скобки важнее приоритета.
- ¬A — «не A»; A ∧ B — «A и B»; A ∨ B — «A или B», причём «или» неисключающее.
- A → B — «если A, то B»; A ≡ B — «A тогда и только тогда, когда B».
- Импликация ложна только в одном случае: A истинно, B ложно.
- Эквивалентность истинна, когда значения A и B совпадают.
- Законы де Моргана помогают убрать отрицание перед скобкой.
A → B = ¬A ∨ BA ≡ B = (A ∧ B) ∨ (¬A ∧ ¬B)¬(A ∧ B) = ¬A ∨ ¬B¬(A ∨ B) = ¬A ∧ ¬B
Импликация и её отрицание
Почти все задачи сводятся к вопросу, где импликация может стать ложной. Это происходит только на множестве A \ B: там A истинно, а B ложно. Поэтому отрицание импликации — это A ∧ ¬B.
- A → B истинна на всём, кроме A \ B.
- Если A — отрезок, а B — условие на x, ищите часть A, где B не выполняется.
- Цепочка A → B → C раскрывается слева направо: ¬A ∨ ¬B ∨ C.
- «Тождественно истинно» означает, что запрещённых точек нет.
- «Тождественно ложно» означает, что истинных точек нет.
A → B = ¬A ∨ B¬(A → B) = A ∧ ¬BA → (B → C) = ¬A ∨ ¬B ∨ C
Кванторы и формулировки
В условии почти всегда написано «при любом x» или «для всех x, y». Это квантор всеобщности. Он требует, чтобы формула была истинна в каждой точке допустимой области, а не в одной удачной.
- ∀x P(x) — P верно для всех x из области.
- ∃x P(x) — существует хотя бы одно x, где P верно.
- Отрицание ∀x P(x) — это ∃x ¬P(x), а не ∀x ¬P(x).
- «Тождественно истинно» = ∀x P(x); «тождественно ложно» = ∀x ¬P(x).
- «Не тождественно истинно» = ∃x ¬P(x): достаточно одного контрпримера.
- Область x важна: натуральные, целые, неотрицательные и положительные числа дают разные ответы.
¬∀x P(x) = ∃x ¬P(x)¬∃x P(x) = ∀x ¬P(x)
Множества и числовая прямая
Условие x ∈ A — это принадлежность множеству. Отрезки, интервалы и полуинтервалы — частные случаи множеств на числовой прямой. Рисунок почти всегда быстрее формул.
- A ∪ B — объединение; A ∩ B — пересечение; A \ B — разность; ¬A — дополнение.
- [a; b] включает оба конца, (a; b) не включает, [a; b) включает только a.
- На прямой удобно отмечать границы и штриховать запрещённые и обязательные участки.
- Для дискретных множеств (целые числа, делители) рисуйте не прямую, а список элементов.
- Пустое множество допустимо, если в условии нет запрета.
x ∈ A ∪ B ⇔ x ∈ A ∨ x ∈ Bx ∈ A ∩ B ⇔ x ∈ A ∧ x ∈ Bx ∈ A \ B ⇔ x ∈ A ∧ x ∉ B
Импликация как включение
Для множеств x ∈ A → x ∈ B означает A ⊆ B. Это главный перевод условий про отрезки и множества. Если A не должно выходить за B, то A — подмножество B; если A обязано покрыть разность, то B \ C ⊆ A.
- A ⊆ B: каждая точка A лежит в B.
- A → B ложно ровно на A \ B, поэтому нужно сделать A \ B пустым.
- Если A неизвестно, а B и C даны, условие часто превращается в B \ C ⊆ A.
- Для «наибольшей длины A» ищите максимальное подмножество, не нарушающее запрет.
- Для «наименьшей длины A» ищите минимальное покрытие обязательной части.
(x ∈ A → x ∈ B) ⇔ A ⊆ BA → B нарушается ⇔ A \ B ≠ ∅
Отрезки: длина и целые точки
Длина отрезка [a; b] равна b − a, а количество целых точек — b − a + 1. Для полуинтервала и интервала формулы отличаются на единицу, поэтому проверяйте включение концов.
- Длина [a; b] = b − a; длина (a; b) = b − a.
- Целых точек в [a; b]: b − a + 1, если a и b целые.
- Целых точек в [a; b): b − a; в (a; b]: b − a; в (a; b): b − a − 1.
- Если концы нецелые, считайте целые точки отдельно или округляйте аккуратно.
- Минимальная длина A, покрывающего промежуток, равна его длине; максимальная — длине разрешённой области.
- Не путайте длину и количество целых точек: ответ может отличаться на 1.
|[a; b]| = b − aN([a; b]) = b − a + 1N([a; b)) = b − a
Делимость и кратные
ДЕЛ(x, m) означает, что x кратно m. Множество таких x — {0, m, 2m, …}. Пересечение условий делимости — это кратность НОК, а не произведению.
- ДЕЛ(x, m) ⇔ x mod m = 0.
- ДЕЛ(x, a) ∧ ДЕЛ(x, b) ⇔ ДЕЛ(x, НОК(a, b)).
- ДЕЛ(x, a) ∨ ДЕЛ(x, b) — объединение двух множеств кратных; НОК здесь не заменяет дизъюнкцию.
- A → B для делимости: все кратные A должны попасть в B.
- Наибольшее A обычно делит некоторое НОК; наименьшее A добавляет недостающие множители.
- Для x = 0 делимость выполнена при любом m; учитывайте область определения.
ДЕЛ(x, m) ⇔ ∃k ∈ ℤ: x = kmДЕЛ(x, a) ∧ ДЕЛ(x, b) ⇔ ДЕЛ(x, НОК(a, b))
НОД и НОК
НОД — наибольший общий делитель, НОК — наименьшее общее кратное. Через разложение на простые множители НОК берёт максимальные степени, а НОД — минимальные.
- НОК(a, b) = a·b / НОД(a, b).
- Для взаимно простых a и b НОК(a, b) = a·b.
- В делимости чаще нужен НОК: он описывает общие кратные.
- НОД полезен, когда нужно наибольшее A, делящее несколько чисел.
- Проверяйте, что A натуральное и не превосходит ограничение из условия.
НОК(a, b) = a·b / НОД(a, b)a = 2^α·3^β·5^γ…, b = 2^δ·3^ε·5^ζ…НОД берёт min(α, δ), НОК — max(α, δ)
Поразрядные операции
В задачах с &, |, ^ и ↑ числа удобно переводить в двоичную запись. Операции выполняются независимо в каждом бите, поэтому маску A можно собирать по битам.
- x & A = 0 — у x и A нет общих единичных битов.
- x & A ≠ 0 — есть хотя бы один общий единичный бит.
- x | A — объединение единичных битов; x ^ A — биты, где значения различаются.
- x ^ A = 0 ⇔ x = A; x ^ A ≠ 0 ⇔ x ≠ A.
- x & m = m означает, что все единичные биты m есть в x.
- Поразрядная импликация n ↑ m: в каждом бите n → m, то есть ¬n ∨ m.
- Для поиска A перебирайте биты или небольшие диапазоны; маска быстро стабилизируется.
x & A = 0 ⇔ нет общих единицx ^ A = 0 ⇔ x = An ↑ m = ¬n ∨ m (по битам)
Условия с двумя переменными
Когда в формуле есть x и y, истинность проверяется для всех пар. Часто формула ложна только на одной линии или в одной точке; тогда достаточно исследовать равенство, а не перебирать весь квадрат.
- Найдите случаи, когда первое слагаемое ложно: обычно это уравнение.
- На линии или в точке подставьте выражение и найдите максимум/минимум.
- Для линейных выражений экстремум достигается в конце отрезка или в целой точке.
- Для произведения x·y и квадратов проверяйте границы и нули.
- Если область x, y не ограничена, ищите асимптотику и критические точки.
- Перебор по x и y допустим, если диапазон небольшой; иначе сокращайте до критических пар.
∀x ∀y P(x, y) — проверить все парыP ложно только при равенстве f(x, y) = C
Остатки и пользовательские предикаты
mod(x, m) — остаток от деления x на m; он периодичен с периодом m. Пользовательские функции (последняя цифра, количество единиц, сумма цифр) тоже часто периодичны или сводятся к конечному перебору.
- mod(x, m) = r ⇔ x = km + r.
- Остаток повторяется каждые m чисел: проверяйте один период.
- Последняя цифра — это x mod 10; первая цифра требует оценки разрядов.
- Чётность количества единиц в двоичной записи — bin(x).count('1') % 2.
- Для цифры x перебирайте 0…9; для трёхзначного числа — 100…999.
- Сначала проверьте, не пусто ли множество решений: тогда подходит и A = 0.
mod(x, m) = r ⇔ x ≡ r (mod m)last_digit(x) = x mod 10
Перебор и проверка
На экзамене перебор на Python — законный способ, если правильно выбрать границы. Проверяйте не только ответ, но и область определения, целочисленность и минимальность/максимальность.
- Для A перебирайте диапазон с запасом: от 0 или 1 до 1000–10000, если нет ограничения.
- Для x перебирайте шире, чем границы отрезков, но не бесконечно.
- Используйте all(...) для «для всех» и any(...) для «существует».
- Проверяйте обе стороны: найденное A не должно нарушать условие на соседних значениях.
- Для длины отрезка перебирайте концы, а не все точки, если нужна точность.
- Сравните ответ с оценкой: длина не больше длины объемлющего отрезка, A не больше ограничения.
- Перед записью ответа перечитайте, что именно просят: длину, количество, сумму или произведение.
all(P(x) for x in range(...))any(P(x) for x in range(...))