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

Обозначим через m&n  поразрядную конъюнкцию неотрицательных целых чисел m  и n  .

Так, например, 14&5 = 11102&01012 = 01002 = 4  .

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

((x&35 ⁄= 0)∨ (x &23 ⁄= 0)) → ((x&26 ⁄= 0)∨ (x&A = 0))

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

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

Для начала упростим данное выражение раскрыв импликацию и отрицания:

((x&35 = 0)∧ (x&23 = 0))∨ (x&26 ⁄= 0)∨ (x &A = 0)

Разделим известную часть и выражения с A  :

(((x&35 = 0)∧ (x&23 = 0))∨ (x&26 ⁄= 0))∨(x&A  = 0)

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

Тогда они будут обязаны выполняться для условия с A  : (x&A  = 0)

((x&35 ⁄= 0)∨(x&23 ⁄= 0))∧ (x &26 = 0)

Выпишем поразрядную конъюнкцию x&26 = 0  :

  11010  --xxxxx-   xx0x0

Значит для истинности отрицания числа x  должны в двоичном виде принимать вид ...xx00x0x  , где x – любая цифра.

Теперь выпишем поразрядные конъюнкции ((x&35 ⁄= 0)∨ (x&23 ⁄= 0))  с учётом известных цифр в числах x  :

x&23

 10111  -00x0x--  00x0x

Условие x&23 ⁄= 0  выполнится, если хотя бы одна цифра на месте x будет равна 1. Выпишем числа x  , которые дают истину для отрицания известной части: 001  100 101

x&35

  100011  x00x0x ---------   x0000x

Условие x&35 ⁄= 0  выполнится, если хотя бы одна цифра на месте x будет равна 1. Выпишем числа x  , которые дают истину для отрицания известной части: 000001 000101  100000 100001 100100 100101

После объединения чисел x  из предыдущего пункта получаем весь список x  которые дают истину отрицания известной части: 1,100,101,100000,100001,100100,100101  .

Для этих чисел x  должно быть истинным условие (x&A = 0)  . Значит, в числе A  обязательно должны быть нули в двоичном виде на разрядах 0, 2 и 5 при нумерации с 0 справа налево. Так как число A  натурально, то все нули в нем стоять не могут, поэтому поставим 1 на самый правый доступный разряд. Значит наименьшее число A  имеет значение 102 = 210  . Ответ 2.  

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

def f(x, a):
    return ((x & 35 != 0) or (x & 23 != 0)) <= ((x & 26 != 0) or (x & a == 0))


for a in range(1, 300):
    p = True
    for x in range(0, 300):
        if f(x, a) == False:
            p = False
            break
    if p == True:
        print(a)
        break

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