Тема 15. Алгебра логики – преобразование логических выражений

15.05 Отрезки

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела алгебра логики – преобразование логических выражений
Решаем задачи

Ошибка.
Попробуйте повторить позже

Задача 41#37650Максимум баллов за задание: 1

На числовой прямой даны два отрезка: P = [2,95]  , Q = [20,44]  . Найдите наименьшую возможную длину отрезка   A  , при котором формула

(x ∈ Q ) → (¬(x ∈ P)∧ (x ∈ Q ) → (x ∈ A ))

тождественно истинна, то есть принимает значение 1 при любых x.

Показать ответ и решение

Решение руками

Первым шагом раскроем импликацию и отрицание:

(x ∕∈ Q )∨ (x ∈ P) ∨(x ∕∈ Q )∨ (x ∈ A)

Повторяющуюся скобку (x ∕∈ Q )  можно убрать, тогда получаем выражение:

(x ∕∈ Q)∨ (x ∈ P )∨ (x ∈ A)

Инвертируем известную часть, чтобы определить при каких x  исходное выражение будет ложно:

(x ∈ Q) ∧(x ∕∈ P )

Это выражение будет истино (а изначальное, соответственно, ложно) при x  , которые одновременно принадлежат отрезку Q  и не принадлежат отрезку P  . Таких x  нет, следовательно в исходном выражении при любом x  результат будет истина. Тогда можно взять отрезок A  любой длины, отсюда минимальная длина отрезка A  – 0.

Решение программой

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора минимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки P  и Q  при помощи функции range(), а также ввести переменную r  , равную 10 ** 100: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка       A  : присваиваем его длину r  , если она меньше текущего значения данной переменной. В конце ответ выводится на экран.

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)  # Выводим ответ на экран

Ответ: 0

Ошибка.
Попробуйте повторить позже

Задача 42#43475Максимум баллов за задание: 1

На числовой прямой даны два отрезка:

P = [2212598,7215678]  и Q = [4200000,10202053]  .

Какова наименьшая возможная длина отрезка A, что логическое выражение

¬ (¬ (x ∈ A)∧ (x ∈ P ))∨(x ∈ Q)

тождественно истинно, то есть принимает значение 1 при любом значении переменной х.

Показать ответ и решение

Преобразуем выражение раскрыв отрицание:

(x ∈ A)∨ (x ∕∈ P )∨(x ∈ Q)

Сделаем отрицание известной части, чтобы найти такие x  , при которых исходное выражение дает ложь.

(x ∈ P) ∧(x ∕∈ Q )

Значит, исходное выражение ложно когда x  одновременно принадлежит отрзку P  и не принадлежит отрезку Q  , это промежуток x ∈ [2212598;4200000)  . Тогда, чтобы выражение всегда было истино нам необходимо «перекрыть» все эти иксы отрезком A  . Тогда минимальный отрезок A = [2212598;4200000]  . Его длина равна 1987402  .

Ответ: 1987402

Ошибка.
Попробуйте повторить позже

Задача 43#56316Максимум баллов за задание: 1

На числовой прямой даны два отрезка: P = [12;56]  и Q = [30;85]

Укажите наименьшую длину промежутка А, при котором формула

          -------
((x ∈ P ) → (x ∈ Q))∨ (x ∈ A)

тождественно истинна при любых целых значениях переменной x.

Показать ответ и решение

Решение руками

Упростим начальное выражение:

(x ∕∈ P)∨ (x∈∕Q )∨ (x ∈ A)

Изобразим известную часть на числовой прямой

PIC

Краснымм штрихами отмечена область, которая будет давать истину. Тогда, остается «перекрыть» отрезком A как минимум область, которая отмечена зелеными штрихами. Чтобы длина отрезка A была минимальной в него следует включить строго эту область [30; 56], тогда длина отрезка A равна: 56 − 30 = 26  .

Решение программой

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора минимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки P  и Q  при помощи функции range(), а также ввести переменную r  , равную 10 ** 100: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка       A  : присваиваем его длину r  , если она меньше текущего значения данной переменной. В конце ответ выводится на экран.

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)  # Выводим ответ на экран

Ответ: 26

Ошибка.
Попробуйте повторить позже

Задача 44#57874Максимум баллов за задание: 1

На числовой прямой даны два отрезка: N  = [30,70]  и M = [45,60]  . Укажите наименьшую возможную длину отрезка А для которого выражение

((x ∈ N )∧ (x ∈ M )) −→ (x ∈ A)

тождественно истинно (т.е. принимает значение 1) при любом натуральном значении переменной х?

Показать ответ и решение

Решение руками

Первым шагом раскроем импликацию и отрицание:

(x ∕∈ N) ∨(x ∕∈ M ) ∨(x ∈ A )

Инвертируем известную часть, чтобы понять при каких x  выражение ложно:

(x ∈ N )∧(x ∈ M )

Это выражение истино (а исходное соответственно ложно), когда x  принадлежит отрезку N  , и принадлежит отрезку M  одновременно. Это будут x ∈ [45;60]  . Чтобы исходное выражение было истинно при любом x  необходимо «перекрыть» отрезком A  как минимум эту область. Тогда отрезок A  будет [45;60]  или больше. Так как в задании просят найти минимальную длину, то A = [45;60]  , а его длина 60− 45 = 15  .

Решение программой

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора минимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки N  и M  при помощи функции range(), а также ввести переменную r  , равную 10 ** 100: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной   x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка A  : присваиваем его длину r  , если она меньше текущего значения данной переменной. В конце ответ выводится на экран.

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)  # Выводим ответ на экран

Ответ: 15

Ошибка.
Попробуйте повторить позже

Задача 45#57875Максимум баллов за задание: 1

На числовой прямой даны два отрезка: N  = [100,180]  и M = [145,200]  . Укажите наименьшую возможную длину отрезка А для которого выражение

(x ∈ N ) − → (((x ∈ M )∧ ¬(x ∈ A)) − → ¬(x ∈ N ))

тождественно истинно (т.е. принимает значение 1) при любом натуральном значении переменной х?

Показать ответ и решение

Решение руками

Первым шагом раскроем импликацию и отрицание:

(x∈∕N )∨ (x ∕∈ M )∨ (x ∈ A )∨(x ∕∈ N)

Уберем повторяющуюся часть (x ∕∈ N)  :

(x ∕∈ N) ∨(x ∕∈ M ) ∨(x ∈ A )

Инвертируем известную часть, чтобы понять при каких x  выражение ложно:

(x ∈ N )∧(x ∈ M )

Это выражение истино (а исходное соответственно ложно), когда x  принадлежит отрезку N  , и принадлежит отрезку M  одновременно. Это будут x ∈ [145;180]  . Чтобы исходное выражение было истинно при любом x  , необходимо «перекрыть» отрезком A  как минимум эту область. Тогда отрезок A  будет [145;180]  или больше. Так как в задании просят найти минимальную длину, то A = [145;180]  , а его длина 180 − 145 = 35  .

Решение программой

Идея заключается в переборе возможных концов отрезка A  (от 1 до 200) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора минимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки N  и M  при помощи функции range(), а также ввести переменную r  , равную 10 ** 100: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной   x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка A  : присваиваем его длину r  , если она меньше текущего значения данной переменной. В конце ответ выводится на экран.

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)  # Выводим ответ на экран

Ответ: 35

Ошибка.
Попробуйте повторить позже

Задача 46#57876Максимум баллов за задание: 1

На числовой прямой даны два отрезка: N  = [41,102]  и M  = [78,156]  . Укажите наименьшую возможную длину отрезка А для которого выражение

¬ (¬ (x ∈ A)∧ (x ∈ N ))∨(x ∈ M )

тождественно истинно (т.е. принимает значение 1) при любом значении переменной х?

Показать ответ и решение

Решение руками:

Упростим выражение, раскрыв отрицания:

(x ∈ A)∨ (x ∕∈ N )∨ (x ∈ M )

Найдем случаи, когда известная часть равна 0 и тогда мы узнаем какой должен быть отрезок А для того чтобы выражение было тождественно истинным. Для этого запишем её отрицание:

(x ∈ N )∧(x ∕∈ M )

Инверсия известной части дает 1 когда x  принадлежит отрезку N  и одновременно не принадлежит отрезку  M  . Это полуинтервал [41;78)  . Тогда отрезок A  должен «перекрыть» как минимум эту область. Так как мы ищем минимальную длину отрезка A  , то A = [41;78]  . Его длина равна 78− 41 = 37  .

Решение программой:

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора минимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки N  и M  при помощи функции range(), а также ввести переменную r  , равную 10 ** 100: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной   x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка A  : присваиваем его длину r  , если она меньше текущего значения данной переменной. В конце ответ выводится на экран.

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)  # Выводим ответ на экран

Ответ: 37

Ошибка.
Попробуйте повторить позже

Задача 47#57878Максимум баллов за задание: 1

На числовой прямой даны два отрезка: N = [10,26]  и M  = [13,27]  . Отрезок A таков, что формула

((x ∈ N ) −→ (x ∈ A))∧ ((x ∕∈ M )∨ (x ∈ A))

тождественно истинна (т.е. принимает значение 1) при любом натуральном значении переменной х. В ответе укажите наименьшую длину отрезка A.

Показать ответ и решение

Решение аналитикой

Формула состоит из двух частей:

1. (x ∈ N ) − → (x ∈ A )

2. (x ∕∈ M ) ∨(x ∈ A )

Первая часть будет истинной в следующих случаях:

- Если x ∕∈ N  , то эта часть истинна.

- Если x ∈ N  , то необходимо, чтобы x ∈ A  .

Таким образом, для первой части необходимо, чтобы отрезок A  содержал все значения из отрезка N  = [10,26]  .

Вторая часть будет истинной, если:

- Если x ∕∈ M  , то эта часть истинна.

- Если x ∈ M  , то необходимо, чтобы x ∈ A  .

Таким образом, для второй части необходимо, чтобы отрезок A  содержал все значения из отрезка M  = [13,27]  .

Для того чтобы обе части формулы были истинны одновременно, отрезок A  должен содержать все значения из обоих отрезков N  и M  . Таким образом,

A = [10,27].

Длина отрезка A  рассчитывается по формуле:

L = b− a,

где a = 10  и b = 27  :

L = 27− 10 = 17.

Решение программой

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора минимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки N  и M  при помощи функции range(), а также ввести переменную r  , равную 10 ** 100: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной   x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка A  : присваиваем его длину r  , если она меньше текущего значения данной переменной. В конце ответ выводится на экран.

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)  # Выводим ответ на экран


Ответ: 17

Ошибка.
Попробуйте повторить позже

Задача 48#60318Максимум баллов за задание: 1

На числовой прямой даны два отрезка: B = [12,20]  и C = [25;58]  . Укажите наибольшую возможную длину такого отрезка A, что формула

((x ∈ A) −→ (x ∈ B ))∨ (x ∈ C)

тождественно истинна, то есть принимает значение 1 при любом значении переменной х.

Показать ответ и решение

Решение руками:

Упростим начальное выражение:

(x ∕∈ A) ∨(x ∈ B )∨ (x ∈ C )

Методом сковородки отрицаем известную часть:

(x∈∕B )∧ (x ∕∈ C)

Получаем, что x ∈ (− ∞; 12)⋃(20;25)⋃(58;∞ )  (красная область).

PIC

Но нам нужно взять такой отрезок A  , чтобы x  ему не пренадлежал. То есть нужно выбрать из двух отрезков:    B  или C  .

Наибольшую длину имеет отрезок C  и она равна 58 − 25 = 33  .

Решение программой:

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора максимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки B  и C  при помощи функции range(), а также ввести переменную r  , равную 0: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной   x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка A  : присваиваем его длину r  , если она больше текущего значения данной переменной. В конце ответ выводится на экран.

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)  # Выводим ответ на экран

Ответ: 33

Ошибка.
Попробуйте повторить позже

Задача 49#62995Максимум баллов за задание: 1

На числовой прямой даны два отрезка: P = [25,30]  и Q = [13,22]  . Укажите наибольшую длину отрезка A  , при котором формула

((x ∈ A) → (x ∈ P))∨ (x ∈ Q )

тождественна истинна, то есть принимает значение 1 при любом значении переменной X.

Показать ответ и решение

Решение руками:

Упростим выражение, раскрыв импликацию:

(x ∕∈ A) ∨(x ∈ P )∨ (x ∈ Q)

Тогда получается, множество не A  должно перекрывать следующие участки прямой: (− ∞; 13)∪ (22;25) ∪(30;∞ )  . Для того чтобы этого добиться отрезок A  должен содержаться в одном из отрезков P  или Q  . Наибольшая длина отрезка A  будет достигаться, когда он равен Q  , то есть [13,22]  . Его длина 22− 13 = 9  .

Решение программой:

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора максимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки P  и Q  при помощи функции range(), а также ввести переменную r  , равную 0: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной   x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка A  : присваиваем его длину r  , если она больше текущего значения данной переменной. В конце ответ выводится на экран.

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)  # Выводим ответ на экран

Ответ: 9

Ошибка.
Попробуйте повторить позже

Задача 50#62997Максимум баллов за задание: 1

На числовой прямой даны два отрезка: P = [15;39]  и Q = [44;57]  . Укажите наибольшую возможную длину такого отрезка A  , что формула

((x ∈ A) → (x ∈ P))∨ (x ∈ Q )

тождественно истинна, то есть принимает значение 1 при любом значении переменной   .

Показать ответ и решение

Решение руками:

Упростим выражение, раскрыв импликацию:

(x ∕∈ A) ∨(x ∈ P )∨ (x ∈ Q)

Воспользуемся методом сковородки (отрицания известной части) и найдем случаи, когда известная часть равна 0. Тогда мы узнаем какой должен быть отрезок А для того, чтобы выражение было тождественно истинным.

Скажем, что (x ∈ P )∨(x ∈ Q)  должно быть равно 0. Это выполняется тогда, когда (x ∕∈ P)∧ (x∈∕Q )  равно 1. Это происходит, когда x  принадлежит интервалам: (− ∞; 15) ∪(39;44)∪ (57;∞ )  (красная область на рисунке).

PIC

Но отрезок A  должен быть таким, чтобы x  ему не пренадлежал. Это отрезки P  или Q  . Наибольшая длина отрезка A  будет достигаться, когда он равен P  , то есть [15;39]  . Его длина 39− 15 = 24  .

Решение программой:

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора максимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки P  и Q  при помощи функции range(), а также ввести переменную r  , равную 0: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной   x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка A  : присваиваем его длину r  , если она больше текущего значения данной переменной. В конце ответ выводится на экран.

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)  # Выводим ответ на экран

Ответ: 24

Ошибка.
Попробуйте повторить позже

Задача 51#63000Максимум баллов за задание: 1

На числовой прямой даны два отрезка: P = [10,32]  и Q = [18,45]  . Найдите наименьшую возможную длину отрезка A  , при котором формула

((x ∈ P )∧ ¬(x ∈ A )) → ¬(x ∈ Q )

тождественно истинна, то есть принимает значение 1 при любом значении переменной x  .

Показать ответ и решение

Решение руками:

Упростим выражение, раскрыв импликацию:

(x ∕∈ P )∨(x ∈ A)∨ (x ∕∈ Q)

Найдем случаи, когда выражение ложно. Для этого сделаем отрицание известной части и посмотрим, где оно дает истину:

(x ∈ P )∧ (x ∈ Q)

Отсюда следует, что инверсия дает истину когда x принадлежит одновременно и P, и Q. То есть, в этих ситуациях исходное выражение ложно, значит нужно подобрать такой отрезок A , чтобы «перекрыть» эту часть. Это будет отрезок [18,32]  . Значит, наименьшая длина 32− 18 = 14  .

Решение программой:

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора минимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки P  и Q  при помощи функции range(), а также ввести переменную r  , равную 10 ** 100: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной   x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка A  : присваиваем его длину r  , если она меньше текущего значения данной переменной. В конце ответ выводится на экран.

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)  # Выводим ответ на экран

Ответ: 14

Ошибка.
Попробуйте повторить позже

Задача 52#63924Максимум баллов за задание: 1

На числовой прямой даны два отрезка: P = [10,35]  и Q = [45,78]  . Найдите наибольшую возможную длину отрезка A  , при котором формула

(x ∈ A ) → ((x ∈ P )∧ ¬(x ∈ Q ))

тождественно истинна, то есть принимает значение 1 при любых x  .

Показать ответ и решение

Решение руками

Преобразуем выражение раскрыв импликацию:

(x ∕∈ A)∨ ((x ∈ P)∧ ¬(x ∈ Q))

Построим известную часть на числовой прямой:

PIC

По рисунку видно, что "перекрыта"только часть прямой на отрезке [10, 35], тогда чтобы НЕ A "перекрывала"остальную часть, необходимо чтобы отрезок A полностью лежал внутри этого отрезка. Тогда наибольшая возможная длина отрезка A это 35 - 10 = 25.

Получается ответ: 25.

Решение программой

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора максимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки P  и Q  при помощи функции range(), а также ввести переменную r  , равную 0: в неё будет записан наш ответ. Далее создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка  A  : присваиваем его длину r  , если она больше текущего значения данной переменной. В конце ответ выводится на экран.

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)  # Выводим ответ на экран

Ответ: 25

Ошибка.
Попробуйте повторить позже

Задача 53#64022Максимум баллов за задание: 1

На числовой прямой даны два отрезка: P = [5, 17] и Q = [13, 23]. Найдите наибольшую возможную длину отрезка A, при котором формула

((x ∈ A) → (x ∈ P))∨ (x ∈ Q )

тождественно истинна, то есть принимает значение 1 при любом значении переменной x.

Показать ответ и решение

Решение руками

Первым шагом раскроем импликацию:

(x ∕∈ A) ∨(x ∈ P )∨ (x ∈ Q)

Инвертируем известную часть, чтобы понять при каких x  выражение ложно:

((x∈∕P )∧ (x ∕∈ Q))

Это выражение истино (а исходное соответственно ложно), когда x  не принадлежит отрезку Q  , и не принадлежит отрезку P  одновременно. Это будут x ∈ (− ∞; 5)∪ (23;+ ∞ )  . Чтобы исходное выражение было истино при любом   x  необходимо «перекрыть» областью ¬A  как минимум эту область. Тогда отрезок A  будет [5;23]  или меньне, но в этих границах. Так как в задании просят найти максимальную длину, то A = [5;23]  , а его длина 23 − 5 = 18  .

Решение программой

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора максимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки P  и Q  при помощи функции range(), а также ввести переменную r  , равную 0: в неё будет записан наш ответ. Далее создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка  A  : присваиваем его длину r  , если она больше текущего значения данной переменной. В конце ответ выводится на экран.

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)  # Выводим ответ на экран

Ответ: 18

Ошибка.
Попробуйте повторить позже

Задача 54#87943Максимум баллов за задание: 1

На числовой прямой даны два отрезка: P = [15,44]  и Q = [20,46]  . Отрезок A таков, что формула

(x ∈ P) −→ ((¬(x ∈ Q )∧ ¬(x ∈ A)) → ¬(x ∈ P ))

тождественно истинна (т.е. принимает значение 1) при любом натуральном значении переменной х. В ответе укажите наименьшую длину отрезка A.

Показать ответ и решение

Руками:

Заменим импликацию на отрицание первого или второе:

¬(x ∈ P )∨ (((x ∈ Q )∨ (x ∈ A))∨ ¬(x ∈ P ))

Избавимся от скобок и от повторяющейся ¬(x ∈ P )  :

¬ (x ∈ P)∨ (x ∈ Q )∨ (x ∈ A)

Найдем случаи, когда известная часть равна 0 и тогда мы узнаем какой должен быть отрезок А для того чтобы выражение было тождественно истинным. Для этого запишем её отрицание:

(x ∈ P )∧ (x ∕∈ Q)

Оно равно 1 если x находится в P и при этом не находится в Q. Это отрезок [15;19]. Его длина равна 4.

Ответ: 4

Прогой:

Для нахождения наименьшей длины отрезка A  , при котором выражение

(x ∈ P) −→ ((¬(x ∈ Q )∧ ¬(x ∈ A)) → ¬(x ∈ P ))

тождественно истинно для всех натуральных x  , используем программный перебор. Идея заключается в том, чтобы перебрать все возможные отрезки A = [a1,a2]  с 1 ≤ a1 < a2 ≤ 500  . Для каждого отрезка создаём список всех целых чисел x  внутри A  . Далее проверяем истинность формулы для всех x  от 1 до 499. Если хотя бы для одного x  формула ложна, текущий отрезок A  отбрасываем. Если выражение истинно для всех x  , вычисляем длину A  и обновляем минимальное найденное значение. В конце цикла минимальное значение длины отрезка A  будет ответом.

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

Ответ: 4

Ошибка.
Попробуйте повторить позже

Задача 55#87944Максимум баллов за задание: 1

На числовой прямой даны два отрезка: P = [10,40]  и Q = [18,56]  . Отрезок A таков, что формула

¬(¬((x ∕∈ A) → ((x ∈ P) → (x ∈ Q ))))

тождественно истинна (т.е. принимает значение 1) при любом натуральном значении переменной х. В ответе укажите наименьшую длину отрезка A.

Показать ответ и решение

Решение руками:

Раскроем скобки:

¬(¬((x ∈ A )∨ (x ∕∈ P)∨ (x ∈ Q )))

(x ∈ A) ∨(x ∕∈ P )∨ (x ∈ Q)

Отрицаем известную часть:

(x ∈ P )∧ (x ∕∈ Q)

Получаем, что нам подходит отрезок: [10; 17]. Его длина 17− 10 = 7  .

Решение программой:

Идея заключается в переборе возможных концов отрезка A  (от 1 до 100) и проверке, что при всех значениях переменной x  (от 1 до 1000) исходное выражение даёт истину. Если во время проверки найдётся хотя бы одно значение x  , нарушающее условие, программа должна перейти к рассмотрению нового отрезка. После завершения перебора минимальная полученная длина отрезка A  и будет ответом.

Для реализации этой идеи необходимо задать отрезки P  и Q  при помощи функции range(), а также ввести переменную r  , равную 10 ** 100: в неё будет записан наш ответ. Далее, создадим цикл for, необходимый для перебора значений начала отрезка A  . Внутри него, с помощью того же цикла, организуем перебор значений конца искомого отрезка. При каждой итерации будем создавать переменную-флаг, которая изначально равна 0, а затем задавать отрезок A  при помощи функции range(). Внутри нижнего цикла необходимо начать перебор значений переменной   x  . Если выражение ложно хотя бы для одного x  , то флагу присваивается значение 1, а последний цикл останавливается. Если после перебора всех значений флаг остаётся равным 0, значит выражение тождественно истинно для текущего отрезка A  : присваиваем его длину r  , если она меньше текущего значения данной переменной. В конце ответ выводится на экран.

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)  # Выводим ответ на экран

Ответ: 7

Ошибка.
Попробуйте повторить позже

Задача 56#136843Максимум баллов за задание: 1

На числовой прямой даны два отрезка: P = [25;64]  и Q = [40,115]  . Укажите наименьшую возможную длину такого отрезка A  , что логическое выражение

(x ∈ P) → (((x ∈ Q )∧ ¬(x ∈ A )) → ¬(x ∈ P )

истинно (т.е. принимает значение 1) при любом значении переменной х.

Показать ответ и решение

Упростим выражение, раскрыв импликацию и отрицание:

(x ∕∈ P)∨ ¬((x ∈ Q )∧ ¬(x ∈ A ))∨ (x∈∕P )

(x ∕∈ P)∨ (x∈∕Q )∨ (x ∈ A)∨ (x∈∕P )

(x ∕∈ Q )∨(x ∈ A)∨ (x ∕∈ P)

Отрицаем известную часть:

(x ∕∈ Q)∨ (x ∕∈ P ) = 0

Значит,

(x ∈ Q)∧ (x ∈ P ) = 1

Изобразим это на числовой прямой:

PIC

Так как x  должен принадлежать A  , то A = [40;64]  . Длина такого отрезка равна 64 − 40 = 24  .

Ответ: 24
Рулетка
Вы можете получить скидку в рулетке!