На числовой прямой задан отрезок А. Известно, что формула
тождественно истинна при любых вещественных x и y. Найдите наибольшую и наименьшую длины, которые может иметь отрезок А? В ответе укажите разницу между этими числами.
Аналитическое решение
Упростим выражение, раскрыв импликацию:
Красным на этом рисунке выделены области, которые перекрываются известной частью выражения, а синей те части, которые необходимо перекрыть отрезком .
Так как и
, то наименьший отрезок, которым может быть
это [-6; 6]. Так как если сделать его еще меньше, то будут точки на оси
для которых выражение не будет являться истиной. Длина этого отрезка – 12.
Наибольший отрезок, которым может быть это [-9; 9]. Так как если сделать его еще больше, то будут точки на оси
для которых выражение не будет являться истиной. Длина этого отрезка – 18.
Остается только найти разницу между этими числами: .
Решение программой
minLen = 10**10 # Наименьшая длина отрезка A
maxLen = 0 # Наибольшая длина отрезка A
# Так как по задаче числа - вещественные,
# то будем делать перебор с точностью до 0.25.
# Для этого нужно перебирать целые числа (заранее умноженные на 4),
# а затем делить на 4. Это нужно, так как range перебирает только целые числа.
# Представим отрезок A = [a; b]
for a in range(-30, 30):
for b in range(a, 30):
ok = 1 # Создадим переменную-флаг
# Если она будет равна 1, то отрезок подходит
# Если она изменится и станет равна 0, то отрезок не подходит
# Делаем перебор x,y в пределах отрезка А
for x in range(-30*4, 30*4 + 1):
x /= 4
for y in range(-30*4, 30*4 + 1):
y /= 4
# (x принадлежит отрезку А=[a;b]) равносильно выполнению неравенства (a <= x <= b)
F = ((a <= x <= b) <= (x**2 <= 81)) and ((y**2 <= 36) <= (a <= y <= b))
if F == 0: # Если условие нарушается
ok = 0 # Изменяем переменную-флаг
break # Выходим из текущего цикла перебора y
if ok == 0: # Условие оказалось нарушено
break # Прекращаем перебор x
# Если по итогу перебора x и y
# Переменная-флаг осталась быть равна 1
if ok == 1:
# Пробуем сохранить длину, как минимальную и максимальную
minLen = min(minLen, (b - a))
maxLen = max(maxLen, (b - a))
print(maxLen - minLen) # Выводим разность