Задача к ЕГЭ по информатике на тему «побитовая конъюнкция» №1

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

Для какого наибольшего неотрицательного целого числа A  формула (x&A  ⁄=  0) → ((x&11  = 0) →  (x&17  ⁄= 0))  тождественно истинна (т.е. принимает значение 1  при любом неотрицательном целом значении переменной x  )?

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

Введем обозначение: x&a  = 0 ⇔  Za.  Тогда данное выражение перепишется в виде ZA- →  (Z11 → Z17-).

Воспользуемся тем, что          -- a →  b = a ∨ b.  Тогда наше выражение имеет вид      ----  ---- ZA ∨ Z11 ∨ Z17.

Теперь воспользуемся тем же, только в обратную сторону. Запишем выражение так: Z11 ∧ Z17 →  ZA.

Помним, что Za ∧  Zb = Za or b.  Значит, нам нужно найти наибольшее неотрицательное целое A  такое, что Z       →  Z   = 1.   11or17     A

Z11or17   мы можем сразу вычислить. Так как 11 = 10112, 17 = 100012,  можем выполнить поразрядное сложение:

 01011;  10001; -11011---

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

Таким образом, единица может стоять на тех местах, где она стоит в двоичной записи числа слева — необязательно, но если где-то и стоит, то только там. Но вспомним, что мы ищем максимальное A  : значит, мы хотим, чтобы в A  было как можно больше единиц. А так как единицы могут быть только на тех местах, где стоят единицы в 11011,  наибольшее возможное A,  — это и есть 110112 =  2710.

 

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

for a in range(1000, 1, -1):
    flag = True
    for x in range(10000):
        if ((x & a != 0) <= ((x & 11 == 0) <= (x & 17 != 0))) == False:
            flag = False
            break
    if flag == True:
        print(a)
        break

Ответ: 27
Оцените статью
Я решу все!