вентилятор
Хорошего настроения!

ЕГЭ по информатике 2022 - Задание 15 (Простым языком)



Сегодняшний урок посвящён 15 заданию из ЕГЭ по информатике 2022.


Темой этого урока связана с преобразованием логических выражений.


Теорию для преобразования логических выражений Вы можете посмотреть в этой статье. Как можно работать с логическими выражениями на питоне, можно прочитать в этой статье.





Перейдём к практике решения задач 15 задания из ЕГЭ по информатике 2022.


Задача (Неравенство, одна переменная)

Какое количество натуральных чисел удовлетворяет логическому условию:


¬(X2 ≥ 9) ∨ ¬((X < 7) ∨ (X ≥ 10)) ?

Решение:

Первый способ (с помощью питона).


k=0
for x in range(1, 1000):
    if not(x**2 >= 9) or not((x < 7) or (x>=10)):
        k = k + 1
        
print(k)

Здесь перебираем с помощью цикла for натуральные числа от 1 до 1000.


Если логическое выражение выдаёт истину, то мы подсчитываем такой вариант.


Программа напечатает число 5.





Второй способ (с помощью рассуждений).


Натуральные числа - это целые, положительные числа. Например: 1, 2, 3, 4, и т. д.


Преобразуем первое выражение ¬(X2 ≥ 9) = (X2 < 9). Отрицание внесли в скобки. В этом случае знак, который находится в скобках, нужно поменять на противоположный.


Важно: Если было строгое неравенство, то оно станет нестрогим, и наоборот, если было неравенство нестрогим, то оно станет строгим.


Получается, что выражение (X2 < 9) будет истинно только при двух значениях: X = 1, X = 2.


Во втором выражении ¬((X < 7) ∨ (X ≥ 10)) удобно применить формулу Де Моргана.



Формула де Моргана:

¬(A ∨ B) = ¬A ∧ ¬B

¬(A ∧ B) = ¬A ∨ ¬B


Преобразуем выражение по формуле де Моргана и внесём отрицание в скобки:


¬((X < 7) ∨ (X ≥ 10)) = ¬(X < 7) ∧ ¬(X ≥ 10) = (X ≥ 7) ∧ (X < 10)

Получилось выражение (X ≥ 7) ∧ (X < 10). Между двумя выражениями стоит логическое умножение. Значит, одновременно должны выполняться и первое неравенство, и второе. Таким образом, получается, что подходят три значение для выражения (X ≥ 7) ∧ (X < 10). Это X = 7, X = 8, X = 9.


Обратимся к самому начальному логическому условию. Там два выражения соединятся логическим сложением. Значит, мы должны объединить те случаи, когда у нас первое выражение становится истинным (X=1, X=2), и те случаи, когда второе выражение становится истинным (X = 7, X = 8, X = 9).


Получается всего 5 натуральных чисел удовлетворяют изначальному логическому условию.


Ответ: 5



Разберём ещё одну разминочную задачу для подготовки к ЕГЭ по информатике 2022.


Задача (Неравенство, две переменные)

Для какого наибольшего целого неотрицательного числа A выражение


(x ≥ A) ∨ (y ≥ A) ∨ (x * y ≤ 205)

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


Решение:

Первый способ (с помощью питона).


for A in range(0, 300):
    k=0
    for x in range(1, 301):
        for y in range(1, 301):
            if (x >= A) or (y >= A) or (x * y <= 205):
                k=k+1
    if k==90000:
        print(A)

В первом цикле перебираем значения для A. Здесь мы пытаемся подобрать ответ в диапазоне от 0 до 300. Этот диапазон меньше, чем в прошлой задаче. Потому что здесь три вложенных цикла, и если перебирать числа от 0 до 1000, то программа может работать очень долго. При необходимости можно указать другой диапазон.


Для каждого A устанавливаем счётчик k в ноль.


Затем перебираем все числа в диапазоне от 1 до 300 (включительно) для переменных x и y, тем самым имитируем фразу "для любых x и y".


Если логическое выражение сработает при каждом значении x и y, то считается, что значение A нам подходит, и в счётчике по окончанию вложенных циклов будет значение 90000 (300 * 300 = 90000).


Наибольшее число, которое напечатает программа равно 15.





Второй способ (с помощью рассуждений).


Здесь есть три выражения в скобках, которые соединены логическим сложением. При логическом сложении достаточно хотя бы одного выражения, где будет истина, чтобы всё общее выражение было истинно.


Если мы сделаем A слишком большим, к примеру A = 250, то найдутся такие x = 16, y = 16, при которых все три условия в скобках не будут выполняться, и, значит, всё общее выражение будет ложным.


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


Сделаем так: пока x и y меньше A, должно "работать" третье выражение в скобках. Как только x или y сравняются с A - начинают "работать" первое или второе выражение.


До какого же максимального значения могут дойти x и y, чтобы перемножение этих двух чисел было меньше или равно 205 (x * y <= 205) ?


15 * 15 = 225
14 * 14 = 196

Получается, пока числа x и y меньше 15, "выручает" третье выражение (x * y ≤ 205), как только станут x ≥ 15 и y ≥ 15, будут "работать" первое и второе выражение.


Отсюда получаем, что максимальное число A = 15


Ответ: 15



Задача (Функция ДЕЛ)

Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». Для какого наибольшего натурального числа А формула


¬ДЕЛ(x, А) → (ДЕЛ(x, 6) → ¬ДЕЛ(x, 9))

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



Решение:

Первый способ (с помощью питона).


def D(n, m):
    if n%m==0:
        return True
    else:
        return False

for A in range(1, 1000):
    k=0
    for x in range(1, 1001):
        if D(x, A) or (not(D(x, 6)) or not(D(x, 9))):
            k=k+1
    if k==1000:
        print(A)

Здесь мы формируем функцию ДЕЛ (функцию D). Если n делится на m, то функция возвращает Истину, в противном случае функция возвращает Ложь.


Далее решаем примерно так же, как и в прошлых задачах: для каждого числа A перебираем все значения x. Следование расписываем по формуле A ⟶ B = ¬A ∨ B.


Наибольшее число здесь получается равно 18.





Второй способ (с помощью рассуждений).


Рассмотрим случай, когда в левой части логического выражения будет 1, а в правой 0. В остальных случаях беспокоится не за что, потому что вся формула будет выдавать истину.


ЕГЭ по информатике 2022 - задание 15 (Функция ДЕЛ)

Посмотрим, когда в правой части получается ноль. Функция ДЕЛ(x, 6) должна выдавать истину. Т.е. x должен делится на 6. А функция ¬ДЕЛ(x, 9) должна выдавать ноль. Т.е. без отрицания ДЕЛ(x, 9) должна выдавать истину. Значит, x так же делится на 9.


x делится на 6 => x = 2*3*n, n ∈ N
x делится на 9 => x = 3*3*n, n ∈ N

Чтобы выполнялся случай, когда в правой части получается ноль, икс должен быть равен x = 3*3*2*n (n ∈ N). Т.е. получается, что икс должен быть кратен 18.


Т.е. получается, что когда x делится на 18, в правой части логического выражения будет получатся ноль. Чтобы спасти ситуацию, мы должны в левой части логического выражения не получать 1. Следовательно, ¬ДЕЛ(x, А) должно выдавать ноль. Значит, ДЕЛ(x, А) должно выдавать 1. Таким образом, приходим к выводу, что A должно равняться 18.


Если получится опасная ситуация, когда x кратен 18, то она будет нейтрализована, ведь в левой части будет получатся ноль.


Ответ: 18



Ещё один важный тип задач 15 задания ЕГЭ по информатике 2022


Задача (Поразрядная конъюнкция)

Обозначим через m&n поразрядную конъюнкцию неотрицательных целых чисел m и n. Так, например, 14&5 = 11102 & 01012 = 4

Для какого наименьшего неотрицательного целого числа A формула


x&51 ≠ 0 → (x&A = 0 → x&25 ≠ 0)

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


Решение:

Первый способ (с помощью питона).


for A in range(0, 1000):
    k=0
    for x in range(0, 1000):
        if x&51==0 or (x&A!=0 or x&25!=0):
            k=k+1

    if k==1000:
        print(A)

Здесь следование преобразовываем по формуле: A ⟶ B = ¬A ∨ B. Так же и A, и x неотрицательные числа. Поэтому мы перебираем их диапазон, начиная с нуля. Из-за этого в цикле, который перебирает переменную x, мы устанавливаем верхнюю границы равной 1000, а не 1001. Тогда тоже будет 1000 повторений в этом цикле.


Наименьшее число равно 34.





Второй способ (с помощью рассуждений).


Переведём числа 51 и 25 в двоичную систему.


51 = 1100112
25 = 110012

Формула будет тождественно ложна, когда


ЕГЭ по информатике 2021 - задание 15 (Поразрядная конъюнкция)

Этого допустить нельзя!


При каком x получается в левой выражении формулы истина ? Если у икса в двоичном представлении в тех разрядах, где у числа 51 стоят 1, будет хотя бы в одном месте 1.



Рассмотрим правое выражение формулы. Ноль получается в единственном случае:


ЕГЭ по информатике 2021 - задание 15 (Поразрядная конъюнкция)

Рассмотрим выражение x&25 ≠ 0. Чтобы в этом логическом выражении получился ноль, нужно x&25 = 0. Посмотрим на двоичное представление числа 25. В тех разрядах, где стоят единицы, у икс должны быть нули (для x&25 = 0).


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


ЕГЭ по информатике 2021 - задание 15 (Поразрядная конъюнкция, схема решения)

Нам нужно "поломать эту песенку" с помощью x&A = 0. Т.е. нельзя допускать, чтобы это выражение было истинно.


Получается, что A = 1000102. Это наименьшее из возможных число, при котором мы точно себя обезопасим от того, что вся формула будет ложна.


A = 1000102 в десятичной системе будет 34.


Ответ: 34



Ещё один тип задач 15 задания ЕГЭ по информатике


Задача (числовая прямая)

На числовой прямой даны отрезки P=[5, 13] и Q=[8, 19]. Укажите наименьшую возможную длину такого отрезка A, что формула (¬(x ∈ P) → (x ∈ Q)) → (x ∈ A ) верна при любых значениях x.


Решение:

Первый способ (с помощью питона).


def F(a, b, x):
    if a <= x <= b:
        return True
    else:
        return False

mn=10**9

for a in  range(0, 200):
    for b in  range(a, 200):
        k=0
        for i in  range(-200, 200):
            x = i / 2
            if not((F(5, 13, x) or F(8, 19, x))) or F(a, b, x):
                k=k+1

        if k==400:
            mn= min(mn, b-a)

 print(mn)

Получается ответ 14. Более подробно, как решать задачи на ОТРЕЗКИ из 15 задания ЕГЭ по информатике на Python, можете посмотреть в этой статье.





Второй способ (с помощью рассуждений).


Если будут такие варианты:


ЕГЭ по информатике 2021 - задание 15 (Задача числовая прямая)


То нам беспокоится не о чём. Потому что формула всегда будет истинна! (см. таблицу истинности для следования →)


Нас же будет интересовать этот случай.


ЕГЭ по информатике 2021 - задание 15 (Задача числовая прямая, решение)

При таком раскладе вся формула будет ложна! Нам нужно этого не допустить при любом значении x!


Единица получается в первом подвыражении в трёх случаях:


1) Случай
ЕГЭ по информатике 2021 - задание 15 (Задача числовая прямая, решение, первый случай)


Выражение ¬(x ∈ P) получается ложно, когда (x ∈ P) будет истинно! Получается при x ∈ [5, 13] выражение ¬(x ∈ P) - ложно!


Выражение (x ∈ Q) ложно, когда x ∉ [8, 19]


Какой же минимальной длины должен быть отрезок A, чтобы этот случай не проходил при любом x ? При этом случае отрезок A должен быть равен [5, 8). Тогда левое выражение пусть и может стать единицей при x ∈ [5, 8), но выражение (x ∈ A) будет также равно 1 при x ∈ [5, 8)! И схема 1 → 0 не пройдёт. Будет 1 → 1.


Для 1 случая A=[5, 8).


2) Случай
ЕГЭ по информатике 2021 - задание 15 (Задача числовая прямая, решение, второй случай)


При каких x выражение ¬(x ∈ P) обращается в ноль, мы уже рассматривали: x ∈ [5, 13].


Второе выражение "выдаёт" 1 при x ∈ [8, 19].


Получается, что при при x ∈ [8; 13] первое выражение в скобках в главной формуле будет тождественно истинно!


С помощью отрезка A нужно это нейтрализовать путём превращения второго выражения в скобках в главной формуле в 1, пока x ∈ [8; 13]. Значит, для этого случая A = [8; 13]


3) Случай
ЕГЭ по информатике 2021 - задание 15 (Задача числовая прямая, решение, третий случай)


В выражении ¬(x ∈ P) единица получается, когда в выражении (x ∈ P) получается ноль. Тогда x ∉ [5, 13]!


Чтобы во втором выражении (x ∈ Q) была единица, нужно, чтобы x ∈ [8, 19].


Получается, что 3 случай выполняется, если x ∈ (13, 19].


С помощью отрезка A нужно этому противодействовать! Нужно чтобы выражение (x ∈ A) было всегда 1 при x ∈ (13, 19]. Тогда A должно быть (13, 19].


Следовательно, для третьего случая A=(13, 19].


Нам нельзя допустить ни одного случая! Поэтому, объединив все случаи, получаем, что A=[5, 19].


Длина отрезка равна 14.


Ответ: 14



Ещё одна задача про числовую прямую из банка тренировочных заданий ЕГЭ по информатике 2021.


Задача (Числовая прямая, закрепление)

На числовой прямой даны отрезки P=[5, 13] и Q=[8, 19]. Укажите наименьшую возможную длину такого отрезка A, что формула ((x ∈ P) ∧ ¬(x ∈ A)) → ((x ∈ Q) ∧ ¬(x ∈ A)) верна при любых значениях x.


Решение:

Первый способ (с помощью питона).


def F(a, b, x):
    if a <= x <= b:
        return True
    else:
        return False

mn=10**9

for a in range(0, 200):
    for b in range(a, 200):
        k=0
        for i in range(-200, 200):
            x = i / 2
            if not((F(5, 13, x) and not(F(a, b, x)))) or (F(8, 19, x) and not(F(a, b, x))):
                k=k+1

        if k==400:
            mn=min(mn, b-a)

print(mn)




Второй способ (с помощью рассуждений).


Формула может быть ложна, когда


ЕГЭ по информатике 2022 - задание 15 (Отрезки 2)

Во всех остальных случаях, формула всегда верна.


Чтобы выражение ((x ∈ P) ∧ ¬(x ∈ A)) было тождественно 1, выражение (x ∈ P) обязательно должно быть тождественно 1. А, значит, x ∈ [5, 13] - это опасная зона, при которой появляется возможность обратить всю формулу в ноль!


Мы можем сразу пресечь эту опасность с помощью отрезка A. Выбрать такой отрезок, чтобы он всегда "выдавал" ложь при x ∈ [5, 13]. Для этого достаточно выбрать A=[5, 13]! Но вдруг его можно сделать ещё более маленьким за счёт правой части формулы ?


Предположим, что отрезок A сделали ещё меньшим. Тогда при каком-то x (x ∈ [5, 13]) выражение ¬(x ∈ A) будет "выдавать" 1! Причём такое же выражение стоит и в правой части формулы! Там тоже будет 1 для выражения ¬(x ∈ A).


Нас же в этом случае должно выручить выражение (x ∈ Q). Если оно "выдаст" 1 в этот "сложный" момент, то мы спасены! Ведь тогда получается, что правая часть всей формулы будет "выдавать" не 0, а 1. Посмотрим при каких x из отрезка [5, 13] приходит это спасение.


Видим, что в интервале x ∈ [8, 13] нас спасает выражение (x ∈ Q).


Значит, отрезок A можно сократить до A=[5, 8).


Длина отрезка будет равна 3!


Ответ: 3



Задачи для закрепления



Задача (Неравенство, две переменные, закрепление)

Для какого наибольшего целого неотрицательного числа A выражение


(x < A) ∧ (y < A) ∧ (x * y > 603)

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


Решение:

Первый способ (с помощью питона).


for A in range(0, 300):
    k=0
    for x in range(1, 301):
        for y in range(1, 301):
            if not( (x < A) and (y < A) and (x * y > 603) ):
                k=k+1
    if k==90000:
        print(A)

Т.к. выражение должно быть ЛОЖНО, то обернём логическое выражение в функцию not(). Видим, что программа не сильно отличается от прошлой задачи. Данный шаблон подходит для большинства задач подобного типа.


Наибольшее число получается равно 25.





Второй способ (с помощью рассуждений).


В этой задаче нужно, чтобы общее выражение было ложно!


Если мы поставим отрицание над всем выражением, то можно искать такое максимальное A, при котором всё выражение тождественно истинно, а не ложно!


¬((x < A) ∧ (y < A) ∧ (x * y > 603)) = ¬(x < A) ∨ ¬(y < A) ∨ ¬(x * y > 603)

Здесь применили формулу де Моргана! Т.е. каждое подвыражение получило отрицание + соединительная логическая операция (логическое умножение) сменилась на противоположную операцию (логическое сложение).


Внесём отрицание в скобки. Получается:


(x ≥ A) ∨ (y ≥ A) ∨ (x * y ≤ 603)

Получили ситуацию, как в прошлой задаче! Напомню, что теперь нужно, чтобы общее выражение было истинно.


Найдём максимальное число, до которого могут "подняться" x и y, чтобы ещё работало третье выражение!


Обратите внимание, что x и y - симметричны. Значит, что верхняя планка для x и y будет одно и тоже число.


Поэтому вспоминаем таблицу квадратов.


25 * 25 = 625
24 * 24 = 576

Получается, что максимальное число до которого могут "дойти" x и y, чтобы "работало" третье выражение, равно 24.


Тогда, начиная с 25 для x и y, должны работать первое и второе выражение.


Получается, что максимальное число для A равно 25.


Ответ: 25



Ещё одна задачка подобного типа из тренировочных упражнений 15 задания ЕГЭ по информатике.


Задача (Неравенство, две переменные, закрепление)

Для какого наименьшего целого числа A формула


(3 * x + y < A) ∨ (x < y) ∨ (16 ≤ x)

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


Решение:

Первый способ (с помощью питона).


for A in range(-300, 300):
    k=0
    for x in range(1, 301):
        for y in range(1, 301):
            if (3*x + y < A) or (x < y) or (16 <= x):
                k=k+1
    if k==90000:
        print(A)

Наименьшее число равно 61. Здесь не сказали, что A принимает неотрицательные значения, поэтому мы включили в диапазон для A числа, которые меньше нуля. Из-за этого увеличилось время выполнения программы, но ответ получим за приемлемое время.



Второй способ (с помощью рассуждений).


Чтобы вся формула была тождественно истинна, нужно, чтобы хотя бы одно выражение "выдавало" истину, т.к. выражения в формуле соединяются с помощью логического сложения!


Взглянем на третье выражение. Пока x ≥ 16, всё идёт как надо. Третье выражение будет истинно, и, значит, вся формула будет истинна.


Но если x ≤ 15, то нужно, чтобы нас "спасало" первое или второе выражение.


Рассмотрим второе выражение. Пока y > x (x ≤ 15) => y > 15, у нас всё нормально, второе выражение будет истинно, и вся формула будет истинна.


Теперь обратим внимание на первое выражение. Оно должно нас "спасать", когда третье и второе выражение "не спасло"! Это возможно, если x ≤ 15 (иначе "спасло" бы третье выражение), а так же y ≤ 15 (иначе "спасало" бы второе выражение).


Но, чтобы первое выражение было всегда истинно при x ≤ 15 и y ≤ 15, мы должны подобрать число A при максимальных x и y (x=15, y=15)! Ведь для более маленьких значений выражение (3 * x + y < A) точно будет истинно.


Получается:


3 * 15 + 15 < A
60 < A

Нужно найти наименьшее число для A, при котором A > 60. Тогда там, где не "спасли" третье и второе выражение, точно "спасёт" первое выражение. Получается A = 61.


Ответ: 61



Задача (ЕГЭ по информатике, Москва, 2020)

Для какого наибольшего целого неотрицательного числа A выражение


(x > A) ∨ (y > x) ∨ (2 * y + x < 110)

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


Решение:

Первый способ (с помощью питона).


for A in range(0, 300):
    k=0
    for x in range(1, 301):
        for y in range(1, 301):
            if (x > A) or (y > x) or (2 * y + x < 110):
                k=k+1
    if k==90000:
        print(A)

Максимальное число получается равно 36.





Второй способ (с помощью рассуждений).


Пока y > x, второе подвыражение всегда истинно, значит, и всё выражение истинно.


Теперь будем рассматривать случай y ≤ x.


Рассмотрим третье подвыражение. Найдём максимальные значения для x и для y, которые они одновременно могут принимать, и при которых ещё выполняется третье условие.


Т.к. мы рассматриваем случай y ≤ x, то максимальное число для y будет xmax т.е. ymax = xmax.

Тогда


2 * xmax + xmax < 110

3 * xmax < 110

36 * 3 = 108
37 * 3 = 111

xmax = ymax = 36

Если x "перевалит" за 36, и при этом y ≤ x (иначе "спасает" второе подвыражение), то должно "спасать" первое выражение.


Получается, что наибольшее значение A будет равно 36.


Ответ: 36



Следующий тип задач часто можно встретить в тренировочных вариантах ЕГЭ по информатике 2022.



Задача (С функцией ДЕЛ, закрепление)

Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». Для какого наибольшего натурального числа A формула


ДЕЛ(120, A) ∧ ((ДЕЛ(x, 70) ∧ ДЕЛ(x, 30)) → ДЕЛ(x, A))

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



Решение:

Первый способ (с помощью питона).


def D(n, m):
    if n%m==0:
        return True
    else:
        return False

for A in range(1, 1000):
    k=0
    for x in range(1, 1001):
        if D(120, A) and (not(D(x, 70) and D(x, 30)) or D(x, A)):
            k=k+1
    if k==1000:
        print(A)

Наибольшее число получается равно 30.





Второй способ (с помощью рассуждений).


Рассмотрим левую часть логического выражения. Мы видим, что число 120 должно делится на A. Значит, для A уже есть некоторое ограничение (A <= 120).


Рассмотрим правую часть выражения. Изучим, когда она превращается в ноль. Тогда


ЕГЭ по информатике 2022 - задание 15 (Функция ДЕЛ) 2

Т.е. x должен делится на 70 и одновременно x должен делится на 30.


x = 70*n = 2*5*7*n (n ∈ N)

x = 30*n = 2*5*3*n (n ∈ N)

Чтобы одновременно выполнялись два условия, икс должен быть равен x = 2*5*7*3*n (n ∈ N).


Для того, чтобы правое выражение не превращалось в ноль, x как раз должен делится на число 2*5*7*3. Тогда будет 1->1. Т.е. число A должно равняться 2*5*7*3. Но мы сказали, что A <= 120, плюс, должно являться делителем числа 120. Значит, должны снизить значение для A.


Рассмотрим значение 2*5*7 для числа A (Предыдущее число, но без тройки). Для правой части оно подходит, т.к. "при малейшей" возможности превращения правого выражения в ноль (т.е. ДЕЛ(x, 70) = True), у нас будет спасаться ситуация, т.к. ДЕЛ(x, A) так же будет равно 1. И снова получаем 1->1. Но это значение не подходит для левой части, ведь тогда A не является делителем числа 120.


Приходится брать число 2*5*3 (без семёрки). Здесь ситуация аналогично предыдущему случаю, только теперь это число является делителем числа 120.


В ответе напишем 30.


Ответ: 30



Задача (Поразрядная конъюнкция, закрепление)

Введём выражение M & K, обозначающее поразрядную конъюнкцию M и K (логическое «И» между соответствующими битами двоичной записи). Определите наименьшее натуральное число A, такое что выражение


(X & 49 ≠ 0) → ((X & 33 = 0) → (X & A ≠ 0))

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



Решение:

Первый способ (с помощью питона).


for A in range(1, 1000):
    k=0
    for x in range(1, 1001):
        if (x&49==0) or ((x&33!=0) or (x&A!=0)):
            k=k+1

    if k==1000:
        print(A)

Наименьшее число равно 16.





Второй способ (с помощью рассуждений).


Переведём числа 49 и 33 в двоичную систему.


4910 = 1100012

3310 = 1000012

Рассмотрим случай, когда функция стремится превратится в ноль.


ЕГЭ по информатике 2022 - задание 15 (Поразрядная конъюнкция, схема решения)

Чтобы левое выражение выдавало истину, икс должен иметь 1 (единицу) в первом разряде или во второй разряде, или в последнем разряде (в 6-ти битном числе).


Рассмотрим правое выражение. Посмотрим, когда выражение (X & 33 = 0) выдаёт истину. Первый бит и последний бит должен быть равен нулю. Т.е получается, что в 6-ти битном числе нас интересует второй бит. Если он будет равен 1 и при этом первый бит и последний будут равны 0, то возникает опасная ситуация, которую нужно спасть.


При выше описанных условиях выражение (X & A ≠ 0) должно выдавать истину. Тогда наименьшее A равно 100002 = 162.


Ответ: 16



Задача (числовая прямая, закрепление 2)

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


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

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



Решение:

Первый способ (с помощью питона).


def F(a, b, x):
    if a <= x <= b:
        return True
    else:
        return False

mn=10**9

for a in range(0, 200):
    for b in range(a, 200):
        k=0
        for i in range(-200, 200):
            x = i / 2
            if not(not(F(a, b, x)) and (F(20, 30, x) or F(35, 60, x))):
                k=k+1

        if k==400:
            mn=min(mn, b-a)

print(mn)


Ответ будет 40.





Второй способ (с помощью рассуждений).


Рассмотрим наоборот, когда логическое выражение выдаёт истину.


ЕГЭ по информатике 2022 - задание 15 (Отрезки 3)

В правой части получается 1, когда x ∈ P или x ∈ Q. Именно в эти моменты выражение ¬(x ∈ A) должно спасать ситуацию и выдавать 0. Тогда без отрицания (x ∈ A) должно выдавать 1. Чтобы покрыть два отрезка, берём A=[20; 60].


Минимальная длина получается 60-20=40.


Ответ: 40

На этом всё! Увидимся в новых уроках по подготовке к ЕГЭ по информатике!







15-12-2021 в 17:51:30





Поддержать сайт:


Похожая статья:

ЕГЭ по информатике - Задание 18 (Простым языком)

Сегодняшний урок посвящён 18 заданию из ЕГЭ по информатике. Темой этог...

Категория: Информатика  Подкатегория: ЕГЭ
Дата: 01-08-2020 в 10:18:01 0


Комментарии:

В первой задаче код выводит 5, а не 8
Maksking 16-12-2021 в 06:58:22

Спасибо, поправил!
Калужский Александр 16-12-2021 в 07:03:07

Большое спасибо, очень интересное и понятное объяснение
Павел 26-12-2021 в 09:40:59

Добрый день! А как в 5 задаче (про числовую прямую) получился ответ 14? В конце же получается, что A принадлежит [5, 19], то есть длина отрезка 15. 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 - 15 штук Или я что-то неправильно понял?
Владимир 02-02-2022 в 12:45:32

Считается количество единиц, а не сколько целых чисел в этом отрезке.
Калужский Александр 02-02-2022 в 13:32:50

И в самой последней задаче на закрепление, у вас, видимо, та же ошибка. Не 40, а 41 должно быть?
Владимир 02-02-2022 в 13:52:40

Ааа, количество единииц считается! Всё, тогда понял, спасибо! :)
Владимир 02-02-2022 в 13:54:11

Почему во второй задаче ответ 15, а не 14, ведь 225>205, а не меньше
Андрей 04-04-2022 в 17:58:10

Как решать 15 задание с "~" тильдой на питоне? Как например это задание: На числовой прямой даны два отрезка: P = [7, 14] и Q = [9, 11]. Укажите наибольшую возможную длину промежутка A, для которого формула ((x ∈ P) ~ (x ∈ Q)) → ¬(x ∈ A)
Иван 25-04-2022 в 11:45:25

Грамотное объяснение. Безумно здорово, что есть объяснения как на питон (перебором) так и чисто в математической форме, потому что в информатике оба подхода, мне кажется, равносильны. Спасибо
Пингвинист 12-01-2023 в 02:31:26

Почему k == 90000 в примере (x > A) ∨ (y > x) ∨ (2 * y + x < 110)
Леонид 20-09-2023 в 11:15:25

Леонид, цикл x повториться 300 раз, цикл y тоже 300 раз. Когда циклы вложенные, то количества повторений перемножаются 300*300
Калужский Александр 20-09-2023 в 11:19:21

Спасибо
Леонид 20-09-2023 в 13:05:51



Оставить коментарий:



Напишите email, чтобы получать сообщения о новых комментариях (необязательно):


Задача против робота. Расположите картинки горизонтально:




Нажимая кнопку Отправить, Вы соглашаетесь с политикой конфиденциальности сайта.