Задание №15 — Сложное логическое выражение
Обозначим через ТРЕУГ(n, m, k) утверждение «существует невырожденный* треугольник с длинами сторон n, m и k». Для какого наибольшего натурального числа А формула
тождественно истинна (т. е. принимает значение 1) при любом натуральном значении переменной х?
Примечание. МАКС(а, b) = а, если а > b и МАКС(a, b) = b, если а ≤ b.
*Треугольник называется невырожденным, если все его стороны имеют длины, большие нуля.
Правильный ответ
6
Пояснение
Решение:
Отрицание всей формулы истинно, когда конъюнкция под ним ложна. Значит для любого натурального должно быть не так, что одновременно
- (а) истинно;
- (б) истинно.
Разбираем (а). Неравенство треугольника для сторон , 12 и 20 даёт и , то есть истинно при .
Далее, означает , поэтому истинно при .
Эквивалентность (а) истинна там, где обе части совпадают:
- : ложь и истина — (а) ложно;
- : истина и истина — (а) истинно;
- : истина и ложь — (а) ложно;
- : ложь и ложь — (а) истинно.
Разбираем (б). На всех , где (а) истинно, нужно, чтобы было ложно. Для сторон , и 3 треугольник существует, если , и .
При и натуральном условие выполнено всегда, поэтому треугольник не существует ровно тогда, когда или .
Это должно выполняться для каждого от 9 до 28. Самое жёсткое ограничение даёт : нужно либо . Но требует либо , а при уже нарушается случай : например, при и все три неравенства треугольника выполняются. Остаётся ветвь , и она годится сразу для всех , так как тогда .
Наибольшее подходящее натуральное число — (при и стороны 9, 7 и 3 образуют треугольник, и формула ложна).
def treug(a, b, c):
a, b, c = sorted((a, b, c))
return a > 0 and a + b > c
def maks(a, b):
return a if a > b else b
def ok(A):
return all(not ((treug(x, 12, 20) == (not (maks(x, 5) > 28))) and treug(x, A, 3))
for x in range(1, 1000))
print(max(A for A in range(1, 100) if ok(A)))
Ответ: 6