15.05 Отрезки
Готовиться с нами - ЛЕГКО!
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: ,
. Найдите наименьшую возможную длину отрезка
, при
котором формула
тождественно истинна, то есть принимает значение 1 при любых x.
Решение руками
Первым шагом раскроем импликацию и отрицание:
Повторяющуюся скобку можно убрать, тогда получаем выражение:
Инвертируем известную часть, чтобы определить при каких исходное выражение будет ложно:
Это выражение будет истино (а изначальное, соответственно, ложно) при , которые одновременно принадлежат
отрезку
и не принадлежат отрезку
. Таких
нет, следовательно в исходном выражении при любом
результат
будет истина. Тогда можно взять отрезок
любой длины, отсюда минимальная длина отрезка
– 0.
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора
минимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 10 ** 100: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора
значений начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого
отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок
при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
. Если
выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается. Если
после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка
:
присваиваем его длину
, если она меньше текущего значения данной переменной. В конце ответ выводится на
экран.
p = range(2, 95 + 1) # Задаём отрезок P q = range(20, 44 + 1) # Задаём отрезок Q r = 10 ** 100 # Длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A f = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if ((x in q) <= (((x not in p) and (x in q)) <= (x in a))) == 0: f = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if f == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = min(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка:
и
.
Какова наименьшая возможная длина отрезка A, что логическое выражение
тождественно истинно, то есть принимает значение 1 при любом значении переменной х.
Преобразуем выражение раскрыв отрицание:
Сделаем отрицание известной части, чтобы найти такие , при которых исходное выражение дает ложь.
Значит, исходное выражение ложно когда одновременно принадлежит отрзку
и не принадлежит отрезку
, это промежуток
. Тогда, чтобы выражение всегда было истино нам необходимо
«перекрыть» все эти иксы отрезком
. Тогда минимальный отрезок
. Его длина равна
.
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
Укажите наименьшую длину промежутка А, при котором формула
тождественно истинна при любых целых значениях переменной x.
Решение руками
Упростим начальное выражение:
Изобразим известную часть на числовой прямой
Краснымм штрихами отмечена область, которая будет давать истину. Тогда, остается «перекрыть» отрезком A как
минимум область, которая отмечена зелеными штрихами. Чтобы длина отрезка A была минимальной в него следует
включить строго эту область [30; 56], тогда длина отрезка A равна: .
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора
минимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 10 ** 100: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора
значений начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого
отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок
при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
. Если
выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается. Если
после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка
:
присваиваем его длину
, если она меньше текущего значения данной переменной. В конце ответ выводится на
экран.
p = range(12, 56 + 1) # Задаём отрезок P q = range(30, 85 + 1) # Задаём отрезок Q r = 10 ** 100 # Длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A f = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if (((x in p) <= (x not in q)) or (x in a)) == 0: f = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if f == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = min(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Укажите наименьшую возможную длину отрезка
А для которого выражение
тождественно истинно (т.е. принимает значение 1) при любом натуральном значении переменной х?
Решение руками
Первым шагом раскроем импликацию и отрицание:
Инвертируем известную часть, чтобы понять при каких выражение ложно:
Это выражение истино (а исходное соответственно ложно), когда принадлежит отрезку
, и принадлежит
отрезку
одновременно. Это будут
. Чтобы исходное выражение было истинно при любом
необходимо «перекрыть» отрезком
как минимум эту область. Тогда отрезок
будет
или
больше. Так как в задании просят найти минимальную длину, то
, а его длина
.
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно
значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения
перебора минимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 10 ** 100: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора
значений начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого
отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать
отрезок
при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
.
Если выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается.
Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего
отрезка
: присваиваем его длину
, если она меньше текущего значения данной переменной. В конце ответ
выводится на экран.
n = range(30, 70 + 1) # Задаём отрезок N m = range(45, 60 + 1) # Задаём отрезок M r = 10 ** 100 # Длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A f = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if (((x in n) and (x in m)) <= (x in a)) == 0: f = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if f == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = min(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Укажите наименьшую возможную длину
отрезка А для которого выражение
тождественно истинно (т.е. принимает значение 1) при любом натуральном значении переменной х?
Решение руками
Первым шагом раскроем импликацию и отрицание:
Уберем повторяющуюся часть :
Инвертируем известную часть, чтобы понять при каких выражение ложно:
Это выражение истино (а исходное соответственно ложно), когда принадлежит отрезку
, и принадлежит
отрезку
одновременно. Это будут
. Чтобы исходное выражение было истинно при любом
,
необходимо «перекрыть» отрезком
как минимум эту область. Тогда отрезок
будет
или больше.
Так как в задании просят найти минимальную длину, то
, а его длина
.
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 200) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно
значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения
перебора минимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 10 ** 100: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора
значений начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого
отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать
отрезок
при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
.
Если выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается.
Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего
отрезка
: присваиваем его длину
, если она меньше текущего значения данной переменной. В конце ответ
выводится на экран.
n = range(100, 180 + 1) # Задаём отрезок N m = range(145, 200 + 1) # Задаём отрезок M r = 10 ** 100 # Длина отрезка A for a1 in range(1, 200): # Перебираем начало отрезка A for a2 in range(a1 + 1, 201): # Перебираем конец отрезка A f = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if ((x in n) <= (((x in m) and (x not in a)) <= (x not in n))) == 0: f = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if f == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = min(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Укажите наименьшую возможную длину
отрезка А для которого выражение
тождественно истинно (т.е. принимает значение 1) при любом значении переменной х?
Решение руками:
Упростим выражение, раскрыв отрицания:
Найдем случаи, когда известная часть равна 0 и тогда мы узнаем какой должен быть отрезок А для того чтобы выражение было тождественно истинным. Для этого запишем её отрицание:
Инверсия известной части дает 1 когда принадлежит отрезку
и одновременно не принадлежит отрезку
.
Это полуинтервал
. Тогда отрезок
должен «перекрыть» как минимум эту область. Так как мы ищем
минимальную длину отрезка
, то
. Его длина равна
.
Решение программой:
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно
значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения
перебора минимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 10 ** 100: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора
значений начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого
отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать
отрезок
при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
.
Если выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается.
Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего
отрезка
: присваиваем его длину
, если она меньше текущего значения данной переменной. В конце ответ
выводится на экран.
n = range(41, 102 + 1) # Задаём отрезок N m = range(78, 156 + 1) # Задаём отрезок M r = 10 ** 100 # Длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A f = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if ((not ((not (x in a)) and (x in n))) or (x in m)) == 0: f = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if f == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = min(len(a), r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Отрезок A таков, что формула
тождественно истинна (т.е. принимает значение 1) при любом натуральном значении переменной х. В ответе укажите наименьшую длину отрезка A.
Решение аналитикой
Формула состоит из двух частей:
1.
2.
Первая часть будет истинной в следующих случаях:
- Если , то эта часть истинна.
- Если , то необходимо, чтобы
.
Таким образом, для первой части необходимо, чтобы отрезок содержал все значения из отрезка
.
Вторая часть будет истинной, если:
- Если , то эта часть истинна.
- Если , то необходимо, чтобы
.
Таким образом, для второй части необходимо, чтобы отрезок содержал все значения из отрезка
.
Для того чтобы обе части формулы были истинны одновременно, отрезок должен содержать все значения из
обоих отрезков
и
. Таким образом,
Длина отрезка рассчитывается по формуле:
где и
:
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно
значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения
перебора минимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 10 ** 100: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора
значений начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого
отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать
отрезок
при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
.
Если выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается.
Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего
отрезка
: присваиваем его длину
, если она меньше текущего значения данной переменной. В конце ответ
выводится на экран.
n = range(10, 26 + 1) # Задаём отрезок N m = range(13, 27 + 1) # Задаём отрезок M r = 10 ** 100 # Длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A f = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if (((x in n) <= (x in a)) and ((x not in m) or (x in a))) == 0: f = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if f == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = min(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Укажите наибольшую возможную длину такого
отрезка A, что формула
тождественно истинна, то есть принимает значение 1 при любом значении переменной х.
Решение руками:
Упростим начальное выражение:
Методом сковородки отрицаем известную часть:
Получаем, что (красная область).
Но нам нужно взять такой отрезок , чтобы
ему не пренадлежал. То есть нужно выбрать из двух отрезков:
или
.
Наибольшую длину имеет отрезок и она равна
.
Решение программой:
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно
значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения
перебора максимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 0: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора
значений начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого
отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать
отрезок
при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
.
Если выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается.
Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего
отрезка
: присваиваем его длину
, если она больше текущего значения данной переменной. В конце ответ
выводится на экран.
b = range(12, 20 + 1) # Задаём отрезок B c = range(25, 58 + 1) # Задаём отрезок C r = 0 # Длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A f = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if (((x in a) <= (x in b)) or (x in c)) == 0: f = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if f == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = max(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Укажите наибольшую длину отрезка
, при
котором формула
тождественна истинна, то есть принимает значение 1 при любом значении переменной X.
Решение руками:
Упростим выражение, раскрыв импликацию:
Тогда получается, множество не должно перекрывать следующие участки прямой:
.
Для того чтобы этого добиться отрезок
должен содержаться в одном из отрезков
или
. Наибольшая длина
отрезка
будет достигаться, когда он равен
, то есть
. Его длина
.
Решение программой:
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно
значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения
перебора максимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 0: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора
значений начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого
отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать
отрезок
при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
.
Если выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается.
Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего
отрезка
: присваиваем его длину
, если она больше текущего значения данной переменной. В конце ответ
выводится на экран.
p = range(25, 30 + 1) # Задаём отрезок P q = range(13, 22 + 1) # Задаём отрезок Q r = 0 # Длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A f = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if (((x in a) <= (x in p)) or (x in q)) == 0: f = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if f == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = max(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Укажите наибольшую возможную длину такого
отрезка
, что формула
тождественно истинна, то есть принимает значение 1 при любом значении переменной .
Решение руками:
Упростим выражение, раскрыв импликацию:
Воспользуемся методом сковородки (отрицания известной части) и найдем случаи, когда известная часть равна 0. Тогда мы узнаем какой должен быть отрезок А для того, чтобы выражение было тождественно истинным.
Скажем, что должно быть равно 0. Это выполняется тогда, когда
равно 1.
Это происходит, когда
принадлежит интервалам:
(красная область на
рисунке).
Но отрезок должен быть таким, чтобы
ему не пренадлежал. Это отрезки
или
. Наибольшая длина
отрезка
будет достигаться, когда он равен
, то есть
. Его длина
.
Решение программой:
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно
значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения
перебора максимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 0: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора
значений начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого
отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать
отрезок
при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
.
Если выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается.
Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего
отрезка
: присваиваем его длину
, если она больше текущего значения данной переменной. В конце ответ
выводится на экран.
p = range(15, 39 + 1) # Задаём отрезок P q = range(44, 57 + 1) # Задаём отрезок Q r = 0 # Длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A f = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if (((x in a) <= (x in p)) or (x in q)) == 0: f = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if f == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = max(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Найдите наименьшую возможную длину отрезка
, при котором формула
тождественно истинна, то есть принимает значение 1 при любом значении переменной .
Решение руками:
Упростим выражение, раскрыв импликацию:
Найдем случаи, когда выражение ложно. Для этого сделаем отрицание известной части и посмотрим, где оно дает истину:
Отсюда следует, что инверсия дает истину когда x принадлежит одновременно и P, и Q. То есть, в этих ситуациях
исходное выражение ложно, значит нужно подобрать такой отрезок A , чтобы «перекрыть» эту часть. Это будет
отрезок . Значит, наименьшая длина
.
Решение программой:
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно
значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения
перебора минимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 10 ** 100: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора
значений начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого
отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать
отрезок
при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
.
Если выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается.
Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего
отрезка
: присваиваем его длину
, если она меньше текущего значения данной переменной. В конце ответ
выводится на экран.
p = range(10, 32 + 1) # Задаём отрезок P q = range(18, 45 + 1) # Задаём отрезок Q r = 10 ** 100 # Длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A f = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if (((x in p) and (not (x in a))) <= (not (x in q))) == 0: f = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if f == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = min(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Найдите наибольшую возможную длину отрезка
, при котором формула
тождественно истинна, то есть принимает значение 1 при любых .
Решение руками
Преобразуем выражение раскрыв импликацию:
Построим известную часть на числовой прямой:
По рисунку видно, что "перекрыта"только часть прямой на отрезке [10, 35], тогда чтобы НЕ A "перекрывала"остальную часть, необходимо чтобы отрезок A полностью лежал внутри этого отрезка. Тогда наибольшая возможная длина отрезка A это 35 - 10 = 25.
Получается ответ:
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно
значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения
перебора максимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 0: в неё будет записан наш ответ. Далее создадим цикл for, необходимый для перебора значений
начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При
каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок
при
помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
. Если выражение
ложно хотя бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается. Если после
перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка
:
присваиваем его длину
, если она больше текущего значения данной переменной. В конце ответ выводится на
экран.
p = range(10, 35 + 1) # Задаём отрезок P q = range(45, 78 + 1) # Задаём отрезок Q r = 0 # Наибольшая длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A c = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 500): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if ((x in a) <= ((x in p) and (not (x in q)))) == 0: c = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if c == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = max(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: P = [5, 17] и Q = [13, 23]. Найдите наибольшую возможную длину отрезка A, при котором формула
тождественно истинна, то есть принимает значение 1 при любом значении переменной x.
Решение руками
Первым шагом раскроем импликацию:
Инвертируем известную часть, чтобы понять при каких выражение ложно:
Это выражение истино (а исходное соответственно ложно), когда не принадлежит отрезку
, и не принадлежит
отрезку
одновременно. Это будут
. Чтобы исходное выражение было истино при любом
необходимо «перекрыть» областью
как минимум эту область. Тогда отрезок
будет
или меньне, но в
этих границах. Так как в задании просят найти максимальную длину, то
, а его длина
.
Решение программой
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно
значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения
перебора максимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 0: в неё будет записан наш ответ. Далее создадим цикл for, необходимый для перебора значений
начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При
каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок
при
помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
. Если выражение
ложно хотя бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается. Если после
перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка
:
присваиваем его длину
, если она больше текущего значения данной переменной. В конце ответ выводится на
экран.
p = range(5, 17 + 1) # Задаём отрезок P q = range(13, 23 + 1) # Задаём отрезок Q r = 0 # Наибольшая длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A c = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if (((x in a) <= (x in p)) or (x in q)) == 0: c = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if c == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = max(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Отрезок A таков, что формула
тождественно истинна (т.е. принимает значение 1) при любом натуральном значении переменной х. В ответе укажите наименьшую длину отрезка A.
Руками:
Заменим импликацию на отрицание первого или второе:
Избавимся от скобок и от повторяющейся :
Найдем случаи, когда известная часть равна 0 и тогда мы узнаем какой должен быть отрезок А для того чтобы выражение было тождественно истинным. Для этого запишем её отрицание:
Оно равно 1 если x находится в P и при этом не находится в Q. Это отрезок [15;19]. Его длина равна 4.
Ответ: 4
Прогой:
Для нахождения наименьшей длины отрезка , при котором выражение
тождественно истинно для всех натуральных , используем программный перебор. Идея заключается в том, чтобы
перебрать все возможные отрезки
с
. Для каждого отрезка создаём список всех целых
чисел
внутри
. Далее проверяем истинность формулы для всех
от 1 до 499. Если хотя бы для одного
формула ложна, текущий отрезок
отбрасываем. Если выражение истинно для всех
, вычисляем длину
и
обновляем минимальное найденное значение. В конце цикла минимальное значение длины отрезка
будет
ответом.
p = [i for i in range(15, 45)] # список всех целых чисел в отрезке P q = [i for i in range(20, 47)] # список всех целых чисел в отрезке Q mn = 10**10 # переменная для хранения минимальной длины A # перебор всех возможных левых концов отрезка A for a1 in range(1, 500): # перебор всех возможных правых концов отрезка A, строго больше a1 for a2 in range(a1+1, 501): c = 0 # флаг: 0 - выражение истинно для всех x, 1 - найдена ложь a = [i for i in range(a1, a2)] # список всех чисел в текущем отрезке A # проверка формулы для всех x от 1 до 499 for x in range(1, 500): if ((x in p) <= ((not(x in q) and not(x in a)) <= (not(x in p)))) == False: c = 1 break # если ложь, прекращаем проверку текущего A # если выражение истинно для всех x, обновляем минимальную длину if c == 0: mn = min(len(a)-1, mn) print(mn) # выводим наименьшую длину подходящего отрезка A
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Отрезок A таков, что формула
тождественно истинна (т.е. принимает значение 1) при любом натуральном значении переменной х. В ответе укажите наименьшую длину отрезка A.
Решение руками:
Раскроем скобки:
Отрицаем известную часть:
Получаем, что нам подходит отрезок: [10; 17]. Его длина .
Решение программой:
Идея заключается в переборе возможных концов отрезка (от 1 до 100) и проверке, что при всех значениях
переменной
(от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно
значение
, нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения
перебора минимальная полученная длина отрезка
и будет ответом.
Для реализации этой идеи необходимо задать отрезки и
при помощи функции range(), а также ввести
переменную
, равную 10 ** 100: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора
значений начала отрезка
. Внутри него, с помощью того же цикла, организуем перебор значений конца искомого
отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать
отрезок
при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной
.
Если выражение ложно хотя бы для одного
, то флагу присваивается значение 1, а последний цикл останавливается.
Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего
отрезка
: присваиваем его длину
, если она меньше текущего значения данной переменной. В конце ответ
выводится на экран.
p = range(10, 40 + 1) # Задаём отрезок P q = range(18, 56 + 1) # Задаём отрезок Q r = 10 ** 100 # Длина отрезка A for a1 in range(1, 100): # Перебираем начало отрезка A for a2 in range(a1 + 1, 101): # Перебираем конец отрезка A f = 0 # Флаг, указывающий на истинность выражения при любых значениях переменной x a = range(a1, a2) # Задаём отрезок A for x in range(1, 1000): # Перебираем значения переменной x # Если при текущем значении переменной x выражение даёт ложь (0), то if (not (not ((x not in a) <= ((x in p) <= (x in q))))) == 0: f = 1 # меняем значение флага на 1, break # останавливаем цикл и переходим к следующему отрезку A if f == 0: # Если значение флага не менялось, значит текущий отрезок A подходит r = min(len(a) - 1, r) # Сравниваем длину отрезка A с переменной r print(r) # Выводим ответ на экран
Ошибка.
Попробуйте повторить позже
На числовой прямой даны два отрезка: и
. Укажите наименьшую возможную длину такого
отрезка
, что логическое выражение
истинно (т.е. принимает значение 1) при любом значении переменной х.
Упростим выражение, раскрыв импликацию и отрицание:
Отрицаем известную часть:
Значит,
Изобразим это на числовой прямой:
Так как должен принадлежать
, то
. Длина такого отрезка равна
.