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