Подтема 4 из 6
Делимость
ДЕЛ в обе стороны, общие кратные и НОК, несколько кратных на отрезке, A как граница и как набор чисел.
Кто на кого делится
Чем ДЕЛ(x, 15) отличается от ДЕЛ(15, x)?
В ДЕЛ(n, m) первое число делится на второе. ДЕЛ(x, 15) — x кратно 15: 15, 30, 45, … ДЕЛ(15, x) — x делитель 15: 1, 3, 5, 15. Кратных бесконечно много, а делителей — всегда несколько.
Пример: при каком наименьшем x > 1 истинно ДЕЛ(x, 30) ∨ ДЕЛ(15, x)? Первая часть требует кратного 30 — это 30, 60, … Вторая — делителя 15 — это 1, 3, 5, 15. Хватит одной истинной части, поэтому ответ — 3.
На Python ДЕЛ(n, m) записывают остатком: . Порядок тот же: ДЕЛ(15, x) — это 15 % x == 0.
Делится на оба
Когда x делится и на 21, и на 35?
Если число делится на два числа, оно делится и на их наименьшее общее кратное — НОК. И наоборот. НОК находят по разложению на простые множители: каждый множитель берут столько раз, сколько он встречается в том числе, где его больше.
21 = 3 · 7, 35 = 5 · 7. В НОК нужны 3, 5 и одна 7: НОК(21, 35) = 3 · 5 · 7 = 105. Значит, ДЕЛ(x, 21) ∧ ДЕЛ(x, 35) — то же, что ДЕЛ(x, 105).
Теперь задача: наибольшее натуральное A, при котором ДЕЛ(x, A) ∨ ¬ДЕЛ(x, 21) ∨ ¬ДЕЛ(x, 35) тождественно истинна. Части без A ложны, когда x делится и на 21, и на 35, — это x = 105, 210, 315, … Каждое из этих чисел должно делиться на A.
Если A делит 105, оно делит и все кратные 105. А A больше 105 не делит само 105. Наибольшее A = 105.
Несколько кратных
В задаче темы на отрезке было одно кратное 15. А если их несколько? Возьмём ту же формулу с отрезком [50; 100]: ДЕЛ(x, A) ∨ ((x ∈ [50; 100]) → ¬ДЕЛ(x, 15)).
Если A должно делить несколько чисел, наибольшее такое A — их наибольший общий делитель, НОД.
Всё решает A при кратных 15 на отрезке: 60, 75 и 90. A должно делить каждое из них.
НОД тоже находят по разложению — теперь берут только общие множители: 60 = 2² · 3 · 5, 75 = 3 · 5², 90 = 2 · 3² · 5. Общие — одна 3 и одна 5: НОД = 15. Ответ — 15.
Тонкости:НОД без разложения
Общий делитель двух чисел делит и их разность: НОД(60, 75) делит 75 − 60 = 15. Так быстро видно, что ответ не больше 15, — остаётся проверить, что 15 делит все три числа. В Python есть готовая функция: даёт 15.
A — граница
Как быть, если A с x сравнивают, а не делят? Пример: наименьшее натуральное A, при котором (x ∈ [10; 40]) → (ДЕЛ(x, 3) ∨ (x < A)) тождественно истинна.
Всё решает A при числах отрезка, которые не делятся на 3. Каждое из них должно быть меньше A — значит, A больше самого большого из них.
Стрелка: ¬(x ∈ [10; 40]) ∨ ДЕЛ(x, 3) ∨ (x < A). Части без A ложны, когда x на отрезке и не кратно 3: 10, 11, 13, 14, …, 40.
40 = 3 · 13 + 1 на 3 не делится. Нужно 40 < A — наименьшее A = 41. Проверяй конец отрезка: если бы он делился на 3, граница была бы на число раньше.
A — набор чисел
Бывает, что A — набор чисел, как в подтеме об отрезках и множествах. Пример: A — конечное множество натуральных чисел, и формула (x ∈ [10; 40]) → (ДЕЛ(x, 5) ∨ (x ∈ A)) тождественно истинна. Какое наименьшее количество чисел в A?
Всё решает A при числах отрезка, не кратных 5: каждое из них обязано лежать в A. Наименьшее A — ровно эти числа.
Всего на отрезке [10; 40] 40 − 10 + 1 = 31 число. Кратных 5 среди них 7: 10, 15, 20, 25, 30, 35, 40. Остальные 31 − 7 = 24 числа и есть наименьшее A. Ответ — 24.
Тонкости:сколько кратных на отрезке
На отрезке от a до b всего b − a + 1 целых чисел. Кратные m считают от первого до последнего: (40 − 10) / 5 + 1 = 7. Без «+1» легко потерять один из концов.
Программой
Как проверить ответ 105 программой?
Шаблон тот же, что для задачи темы: ДЕЛ записывают через %, а диапазон x берут таким, чтобы в него попало несколько чисел, где всё решает A.
def f(x, A): return x % A == 0 or x % 21 != 0 or x % 35 != 0answer = 0for A in range(1, 1000): if all(f(x, A) for x in range(1, 10000)): answer = Aprint(answer)Всё решает A при x = 105, 210, …, поэтому x до 9999 — с большим запасом: в диапазоне 95 таких чисел. A до 999 хватает: A больше 105 не делит 105.
| В условии | На Python |
|---|---|
| ДЕЛ(x, A) | x % A == 0 |
| ¬ДЕЛ(x, 21) | x % 21 != 0 |
| ДЕЛ(A, x) | A % x == 0 |
Итого
- ДЕЛ(x, m)x кратно m
- ДЕЛ(m, x)x — делитель m
- Делится на обаделится на их НОК
- A делит несколько чиселнаибольшее A — их НОД
- A — границабольше самого большого числа
- A — наборвсе числа, где решает A
- Pythonn % m == 0, x — с запасом
Проверьте себя
Ответь сначала сам, потом открой ответ.
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
ОтветСкрыть ответ
Практика
Для проверки ответов нужен JavaScript. Условия, подсказки и решения доступны ниже.
Наибольшее A: 8 и 12
Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». Для какого наибольшего натурального числа A формула ¬ДЕЛ(x, A) → (ДЕЛ(x, 8) → ¬ДЕЛ(x, 12)) тождественно истинна при любом натуральном x?
Введите число.
Подсказка
Замени стрелки: всё решает A, когда x делится и на 8, и на 12.
Решение
¬ДЕЛ(x, A) → (ДЕЛ(x, 8) → ¬ДЕЛ(x, 12)) = ДЕЛ(x, A) ∨ ¬ДЕЛ(x, 8) ∨ ¬ДЕЛ(x, 12). Части без A ложны при x, кратных и 8, и 12, — то есть кратных НОК(8, 12) = 24. Все они должны делиться на A, наибольшее A = 24.
def f(x, A): return x % A == 0 or x % 8 != 0 or x % 12 != 0 answer = Nonefor A in range(1, 1000): if all(f(x, A) for x in range(1, 5000)): answer = Aprint(answer)Ответ: 24
Наименьшее A с ДЕЛ(A, 20)
Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». Для какого наименьшего натурального числа A формула ДЕЛ(A, 20) ∧ (ДЕЛ(84, x) → (¬ДЕЛ(A, x) → ¬ДЕЛ(126, x))) тождественно истинна при любом натуральном x?
Введите число.
Подсказка
Здесь x — делитель: ДЕЛ(84, x) значит «x делит 84».
Решение
Вторая часть равна ¬ДЕЛ(84, x) ∨ ДЕЛ(A, x) ∨ ¬ДЕЛ(126, x). Всё решает A при общих делителях 84 и 126 — это делители НОД(84, 126) = 42. Каждый из них должен делить A, значит, A кратно 42. Ещё A кратно 20, поэтому A кратно НОК(42, 20) = 420.
def f(x, A): return A % 20 == 0 and (84 % x != 0 or A % x == 0 or 126 % x != 0) for A in range(1, 2000): if all(f(x, A) for x in range(1, 200)): print(A) breakОтвет: 420
Наибольшее A с ДЕЛ(60, A)
Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». Для какого наибольшего натурального числа A формула ДЕЛ(60, A) ∧ (¬ДЕЛ(x, A) → (ДЕЛ(x, 8) → ¬ДЕЛ(x, 18))) тождественно истинна при любом натуральном x?
Введите число.
Подсказка
A должно делить и 60, и все кратные НОК(8, 18).
Решение
Вторая часть: всё решает A при x, кратных 8 и 18, то есть кратных 72; A должно делить 72. Первая часть требует, чтобы A делило 60. Наибольший общий делитель 72 и 60 — 12.
def f(x, A): return 60 % A == 0 and (x % A == 0 or x % 8 != 0 or x % 18 != 0) answer = Nonefor A in range(1, 1000): if all(f(x, A) for x in range(1, 5000)): answer = Aprint(answer)Ответ: 12
Некратные 6 на отрезке
Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». Для какого наименьшего натурального числа A формула (x ∈ [20; 54]) → (ДЕЛ(x, 6) ∨ (x < A)) тождественно истинна при любом натуральном x?
Введите число.
Подсказка
Найди самое большое число отрезка, которое не делится на 6. Проверь конец отрезка.
Решение
Всё решает A при числах отрезка, не кратных 6: каждое должно быть меньше A. Конец 54 делится на 6, поэтому самое большое такое число — 53. Нужно 53 < A, наименьшее A = 54.
def imp(p, q): return (not p) or q def f(x, A): return imp(20 <= x <= 54, x % 6 == 0 or x < A) for A in range(1, 1000): if all(f(x, A) for x in range(1, 1000)): print(A) breakОтвет: 54
Кратно 6, но не 4
Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». Для какого наименьшего натурального числа A формула (x < 50) → (¬(ДЕЛ(x, 6) ∧ ¬ДЕЛ(x, 4)) ∨ (x < A)) тождественно истинна при любом натуральном x?
Введите число.
Подсказка
Всё решает A при x < 50, которые делятся на 6, но не делятся на 4.
Решение
Части без A ложны, когда x < 50, x кратно 6 и не кратно 4: это 6, 18, 30, 42 (12, 24, 36, 48 делятся на 4). Самое большое — 42, нужно 42 < A, наименьшее A = 43.
def imp(p, q): return (not p) or q def f(x, A): return imp(x < 50, not (x % 6 == 0 and x % 4 != 0) or x < A) for A in range(1, 1000): if all(f(x, A) for x in range(1, 1000)): print(A) breakОтвет: 43
A — набор чисел
Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». A — конечное множество натуральных чисел, и формула (x ∈ [20; 60]) → (ДЕЛ(x, 4) ∨ (x ∈ A)) тождественно истинна при любом натуральном x. Какое наименьшее количество элементов может быть в A?
Введите число.
Подсказка
В A обязаны войти все числа отрезка, которые не делятся на 4.
Решение
На отрезке [20; 60] 60 − 20 + 1 = 41 число. Кратных 4 среди них (60 − 20) / 4 + 1 = 11. Остальные 41 − 11 = 30 чисел обязаны лежать в A — это наименьшее A.
print(len([x for x in range(20, 61) if x % 4 != 0]))Ответ: 30