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

15.04 Побитовая конъюнкция

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

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

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

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

x&51 = 0∨ (x&42 = 0 → x&A  ⁄= 0)

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

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

Идея решения:

Перебираем целые неотрицательные значения A  с помощью цикла for, чтобы найти наименьшее подходящее. Для каждого A  проверяем тождественную истинность выражения

              (                      )
x &51 =  0 ∨   x&42  = 0 →  x&A  ⁄= 0

для всех неотрицательных целых x  , перебирая их с помощью вложенного цикла for. Для проверки условия поразрядной конъюнкции чисел будем использовать операцию &. Если найдётся хотя бы одно значение x  , для которого выражение ложно, текущее A  отбрасываем. Первое A  , для которого выражение истинно для всех перебранных x  , и будет искомым наименьшим.

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

# Перебор возможных значений A с помощью цикла for
for a in range(1000):
    # Флаг для отслеживания ложных выражений
    flag = 0

    # Перебор неотрицательных целых x с помощью цикла for
    for x in range(1000):
        # Проверяем тождественную истинность формулы
        if ((x & 51 == 0) or ((x & 42 == 0) <= (x & a != 0))) == False:
            # Если выражение ложно для текущего x
            flag = 1
            break

    # Если ложных выражений не было, выводим наименьшее A
    if flag == 0:
        print(a)
        break

Ответ: 17

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

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

Обозначим через m&n  поразрядную конъюнкцию неотрицательных целых чисел m  и n.  Так, например, 14 &5 =  11102&01012  = 01002 = 4.
Для какого наименьшего неотрицательного целого числа A  формула
x &39 =  0 ∨ (x&41 = 0 →  x&A  ⁄=  0)
тождественно истинно (т.е. принимает значение 1 при любом неотрицательном целом значении переменной x)?

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

Идея решения:

Перебираем целые неотрицательные значения A  с помощью цикла for, чтобы найти наименьшее подходящее. Для каждого A  проверяем тождественную истинность выражения

              (                      )
x &39 =  0 ∨   x&41  = 0 →  x&A  ⁄= 0

для всех неотрицательных целых x  , перебирая их с помощью вложенного цикла for. Для проверки условия поразрядной конъюнкции чисел будем использовать операцию &. Если найдётся хотя бы одно значение x  , для которого выражение ложно, текущее A  отбрасываем. Первое A  , для которого выражение истинно для всех перебранных x  , и будет искомым наименьшим.

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

# Перебор возможных значений A с помощью цикла for
for a in range(1000):
    # Флаг для отслеживания ложных выражений
    flag = 0

    # Перебор неотрицательных целых x с помощью вложенного цикла for
    for x in range(1000):
        # Проверяем тождественную истинность формулы с операцией & для поразрядной конъюнкции
        if ((x & 39 == 0) or ((x & 41 == 0) <= (x & a != 0))) == False:
            # Если выражение ложно для текущего x
            # Меняем значение флага
            flag = 1
            # Сбрасываем цикл x
            break

    # Если ложных выражений не было, выводим наименьшее A
    if flag == 0:
        print(a)
        break

Ответ: 6

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

Задача 3#6042Максимум баллов за задание: 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.

 

Идея решения:

Перебираем целые неотрицательные значения A  с помощью цикла for, начиная с большего, чтобы найти наибольшее подходящее. Для каждого A  проверяем тождественную истинность выражения

(x&A  ⁄=  0) → ((x&11  = 0) →  (x&17  ⁄= 0))

для всех неотрицательных целых x  , перебирая их с помощью вложенного цикла for. Для проверки условия поразрядной конъюнкции чисел используем операцию &. Если найдётся хотя бы одно значение x  , для которого выражение ложно, текущее A  отбрасываем. Первое A  , для которого выражение истинно для всех перебранных x  , и будет искомым наибольшим.

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

# Перебор возможных значений A с помощью цикла for (по убыванию)
for a in range(1000, 1, -1):
    # Флаг для отслеживания ложных выражений
    flag = True

    # Перебор неотрицательных целых x с помощью вложенного цикла for
    for x in range(10000):
        # Проверяем тождественную истинность формулы с операцией & для поразрядной конъюнкции
        if ((x & a != 0) <= ((x & 11 == 0) <= (x & 17 != 0))) == False:
            # Если выражение ложно для текущего x
            flag = False
            break

    # Если ложных выражений не было, выводим наибольшее A
    if flag == True:
        print(a)
        break

Ответ: 27

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

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

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

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

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

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

Так как a → b = a-∨ b,  получаем (Z23 ∨ Z17) →  (Z58 ∨ ZA ).  Так как Z23 ∨ Z17 = Z23&17.

23 = 101112,17 =  100012.  Тогда посчитаем 23&17  :

 10111;
-10001;--
 10001

100012 = 1710.

Тогда наше выражение имеет вид Z   →  (Z   ∨ Z  ).
  17     58    A  Это то же самое, что (Z   →  Z  ) ∨ (Z   →  Z ).
  17     58     17     A

Мы сразу можем определить, истинна ли Z17 →  Z58.

17 = 010001
58 = 111010

Нет, не истинна, т.к. на первом месте, например, в двоичной записи 17 стоит 0, а на первом в двоичной записи 58 — 1. Значит, нужно, чтобы истинна была импликация Z17 →  ZA.

Мы ищем наибольшее A.  Чтобы импликация истинна, на тех местах, где в двоичной записи A стоят единицы, стоят единицы и в двоичной записи 17. То есть больше единиц, чем есть в 17, в записи  A  быть не может. Тогда наибольшее A  — это и есть само 17.

Идея решения:

Перебираем целые неотрицательные значения A  с помощью цикла for, чтобы найти наибольшее подходящее. Для каждого A  проверяем тождественную истинность выражения

((x&23  = 0 ) ∨ (x&17 = 0)) →  ((x &58 ⁄=  0) → (x&A  =  0))

для всех неотрицательных целых x  , перебирая их с помощью вложенного цикла for. Для проверки условия поразрядной конъюнкции чисел используем операцию &. Если найдётся хотя бы одно значение x  , для которого выражение ложно, текущее A  отбрасываем. Первое A  , для которого выражение истинно для всех перебранных x  , и будет искомым наибольшим.

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

# Перебор возможных значений A с помощью цикла for
for a in range(1, 1000):
    # Флаг для отслеживания ложных выражений
    flag = True

    # Перебор неотрицательных целых x с помощью вложенного цикла for
    for x in range(10000):
        # Проверяем тождественную истинность формулы с операцией & для поразрядной конъюнкции
        if (((x & 23 == 0) or (x & 17 == 0)) <= ((x & 58 != 0) <= (x & a == 0))) == False:
            # Если выражение ложно для текущего x
            flag = False
            break

    # Если ложных выражений не было, выводим наибольшее A
    if flag == True:
        print(a)
        break

Ответ: 17

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

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

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

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

((x&24 ⁄= 0)∨ (x&A  ⁄= 0)) → (x&24 ⁄= 0)∨ ((x&A ⁄= 0)∧ (x&47 = 0))

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

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

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

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

((x&24  ⁄= 0 ) ∨ (x&A ⁄=  0)) → (x&24  ⁄= 0) ∨ ((x &A  ⁄= 0) ∧ (x &47 =  0))

Раскроем импликацию:

--------------------------
((x&24  ⁄= 0) ∨ (x &A ⁄= 0)) ∨ (x &24 ⁄= 0) ∨ ((x&A ⁄=  0) ∧ (x&47 = 0))

((x&24  = 0) ∧ (x &A = 0)) ∨ (x &24 ⁄= 0) ∨ ((x&A ⁄=  0) ∧ (x&47 = 0))

Теперь воспользуемся свойством      --
A ∨ (A ∧  B) ≡ A ∨ B  :

((x &24 =  0) ∧ (x&A =  0)) ∨ (x&24 ⁄= 0) ≡ (x&A  =  0) ∨ (x&24 ⁄= 0 )

Получим:

(x&A  = 0) ∨ (x&24 ⁄=  0) ∨ ((x&A ⁄=  0) ∧ (x &47 = 0))

Аналогично применим предыдущее свойство:

(x&A  = 0 ) ∨ ((x&A ⁄= 0) ∧ (x&47  = 0)) ≡ (x&A  =  0) ∨ (x&47 = 0)

В итоге выражение упростится до следующего вида:

(x&A  =  0) ∨ (x&24 ⁄= 0) ∨ (x&47  = 0)

Сделаем отрицание известной части, чтобы найти те значения x  , которые будут давать истину для отрицания. Тогда они будут обязаны выполняться для условия с A  : (x&A  = 0 )

(x &24 =  0) ∧ (x&47 ⁄= 0 )

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

  11000
-xxxxx---
 xx000

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

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

  00101111
 ddx00xxx
--00x00xxx--

Условие x&47  ⁄= 0  выполнится, если хотя бы одна цифра на месте x будет равна 1. Выпишем числа x  , которые дают истину для отрицания известной части: 100000, 000100,000010, 000001, ...  Для всех таких чисел x  должно быть истинным условие (x&A  = 0)  . Значит, двоичная запись числа A  обязательно должна иметь вид ...000xx000  , чтобы обнулить все разряды, где могут быть 1 Значит наибольшее число A  имеет значение 11000  = 24
     2      10   . Ответ 24.

Идея решения:

Перебираем целые неотрицательные значения A  с помощью цикла for, чтобы найти наибольшее подходящее. Для каждого A  проверяем тождественную истинность выражения

((x &24 ⁄=  0) ∨ (x&A ⁄=  0)) → ((x&24  ⁄= 0) ∨ ((x &A  ⁄= 0) ∧ (x &47 =  0)))

для всех неотрицательных целых x  , перебирая их с помощью вложенного цикла for. Для проверки условия поразрядной конъюнкции чисел используем операцию &. Если найдётся хотя бы одно значение x  , для которого выражение ложно, текущее A  отбрасываем. Первое A  , для которого выражение истинно для всех перебранных x  , и будет искомым наибольшим.

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

# Перебор возможных значений A с помощью цикла for
ans = 0
for a in range(1000):
    # Флаг для отслеживания ложных выражений
    flag = True
    # Перебор неотрицательных целых x с помощью вложенного цикла for
    for x in range(10000):
        # Проверяем тождественную истинность формулы с операцией & для поразрядной конъюнкции
        if (((x & 24 != 0) or (x & a != 0)) <= ((x & 24 != 0) or ((x & a != 0) and (x & 47 == 0)))) == False:
            # Если выражение ложно для текущего x
            flag = False
            break
    # Если ложных выражений не было, обновляем наибольшее значение A
    if flag == True:
        ans = max(ans, a)
print(ans)

Ответ: 24

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

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

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

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

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

x&17  = 0 →  (x&33 ⁄=  0 →  x&A  ⁄= 0)

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

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

Решение аналитически

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

------------   ------------
(x&17  = 0) ∨ ((x&33 ⁄=  0) ∨ (x &A ⁄= 0))

(x&17  ⁄= 0) ∨ (x&33 =  0) ∨ (x &A ⁄= 0)

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

((x&17  ⁄= 0) ∨ (x&33 =  0)) ∨ (x&A ⁄=  0)

Сделаем отрицание известной части, чтобы найти те значения x  , которые будут давать истину для отрицания. Тогда они будут обязаны выполняться для условия с A  : ((x&A  ⁄= 0)

(x &17 =  0) ∧ (x&33 ⁄= 0 )

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

  10001

-xxxxx---
 x000x

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

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

  100001
--x0xxx0--
  b00000

Условие (x&33 ⁄=  0)  выполнится, если хотя бы одна цифра на месте b  будет равна 1. Значит в числах x  обязательно должна быть единица в 5 разряде. Выпишем числа x  , которые дают истину для отрицания известной части: 100000  .

Для всех таких чисел x  должно быть истинным условие (x&A  ⁄= 0)  . Значит, двоичная запись числа A  обязательно должна иметь вид ...xx1xxxxx  , чтобы при поразрядной конъюнкции с любым числом x  получался в результате хотя бы один разряд 1. Значит наименьшее число a  имеет значение 1000002  = 3210   . Ответ 32  .

Идея решения:

Перебираем целые неотрицательные значения A  с помощью цикла for, чтобы найти наименьшее подходящее. Для каждого A  проверяем тождественную истинность выражения

x&17  = 0 →  (x&33 ⁄=  0 →  x&A  ⁄= 0)

для всех неотрицательных целых x  , перебирая их с помощью вложенного цикла for. Для проверки условия поразрядной конъюнкции чисел используем операцию &. Если найдётся хотя бы одно значение x  , для которого выражение ложно, текущее A  отбрасываем. Первое A  , для которого выражение истинно для всех перебранных x  , и будет искомым наименьшим.

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

# Перебор возможных значений A с помощью цикла for
def f(a):
    # Перебор неотрицательных целых x с помощью вложенного цикла for
    for x in range(1000):
        # Проверяем тождественную истинность формулы с операцией & для поразрядной конъюнкции
        if not ((x & 17 == 0) <= ((x & 33 != 0) <= (x & a != 0))):
            return False
    return True

# Перебор A для поиска наименьшего подходящего
for a in range(1000):
    if f(a):
        print(a)
        break

Ответ: 32

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

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

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

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

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

x&15  = 0 →  (x&29 ⁄=  0 →  x&A  ⁄= 0)

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

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

Решение аналитически

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

------------   ------------
(x&15  = 0) ∨ ((x&29 ⁄=  0) ∨ (x &A ⁄= 0))

(x&15  ⁄= 0) ∨ (x&29 =  0) ∨ (x &A ⁄= 0)

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

((x&15  ⁄= 0) ∨ (x&29 =  0)) ∨ (x&A ⁄=  0)

Сделаем отрицание известной части, чтобы найти те значения x  , которые будут давать истину для отрицания. Тогда они будут обязаны выполняться для условия с A  : ((x&A  ⁄= 0)

(x &15 =  0) ∧ (x&29 ⁄= 0 )

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

     1111

----xxxx---
 ...0xxxx

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

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

  11101
--x0000--
 b0000

Условие (x&29 ⁄=  0)  выполнится, если хотя бы одна цифра на месте b  будет равна 1. Значит в числах x  обязательно должна быть единица в 4 разряде. Выпишем числа x  , которые дают истину для отрицания известной части: 10000  .

Для всех таких чисел x  должно быть истинным условие (x&A  ⁄= 0)  . Значит, двоичная запись числа A  обязательно должна иметь вид ...xx1xxxx  , чтобы при поразрядной конъюнкции с любым числом       x  получался в результате хотя бы один разряд 1. Значит наименьшее число a  имеет значение 100002 =  1610   . Ответ 16  .

Идея решения:

Перебираем целые неотрицательные значения A  с помощью цикла for, чтобы найти наименьшее подходящее. Для каждого A  проверяем тождественную истинность выражения

x&15  = 0 →  (x&29 ⁄=  0 →  x&A  ⁄= 0)

для всех неотрицательных целых x  , перебирая их с помощью вложенного цикла for. Для проверки условия поразрядной конъюнкции чисел используем операцию &. Если найдётся хотя бы одно значение x  , для которого выражение ложно, текущее A  отбрасываем. Первое A  , для которого выражение истинно для всех перебранных x  , и будет искомым наименьшим.

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

# Функция проверки тождественной истинности формулы для данного A
def f(a):
    # Перебор неотрицательных целых x с помощью цикла for
    for x in range(1000):
        # Проверка формулы с использованием операции & для поразрядной конъюнкции
        if not ((x & 15 == 0) <= ((x & 29 != 0) <= (x & a != 0))):
            return False
    return True

# Перебор A для поиска наименьшего подходящего
for a in range(1000):
    if f(a):
        print(a)
        break

Ответ: 16

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

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

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

x &A  ⁄= 0 →  (x&10 =  0 →  x&5 ⁄=  0)

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

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

Идея решения:

Перебираем целые неотрицательные A  с помощью цикла for. Для каждого A  проверяем тождественную истинность

x &A  ⁄= 0 →  (x&10 =  0 →  x&5 ⁄=  0)

для всех неотрицательных x  , используя вложенный цикл for. Для проверки поразрядной конъюнкции применяем оператор &. Если найдётся хотя бы одно x  , при котором формула ложна, текущее A  отбрасываем. Первое A  , для которого формула истинна для всех x  , является искомым наибольшим.

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

# Функция для проверки тождественной истинности формулы для данного A
def f(a):
    # Перебор всех неотрицательных x
    for x in range(1000):
        # Проверяем формулу с использованием поразрядной конъюнкции &
        if not((x & a != 0) <= ((x & 10 == 0) <= (x & 5 != 0))):
            # Нашлось x, для которого формула ложна, данное А не подходит
            return False
    # Формула истинна для всех x, А подходит
    return True

# Перебор возможных A
for a in range(1000, 1, -1):
    # Если формула тождественно истинна для данного A
    if f(a):
        # Выводим наибольшее A
        print(a)
        break

Ответ: 15

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

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

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

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

((x&47  ⁄= 0 ) ∨ (x&24 ⁄= 0)) →  ((x &29 =  0) → (x&A  ⁄=  0))

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

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

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

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

((x&47  ⁄= 0 ) ∨ (x&24 ⁄= 0)) →  ((x &29 =  0) → (x&A  ⁄=  0))

Раскроем импликации:

---------------------------   ------------
((x &47 ⁄= 0 ) ∨ (x&24 ⁄= 0)) ∨ ((x &29 =  0) ∨ (x&A ⁄=  0))

((x &47 = 0 ) ∧ (x&24 = 0)) ∨ ((x &29 ⁄=  0) ∨ (x&A ⁄=  0))

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

(((x&47  = 0) ∧ (x&24  = 0)) ∨ (x &29 ⁄= 0)) ∨ (x&A ⁄=  0)

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

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

((x&47  ⁄= 0) ∨ (x &24 ⁄= 0)) ∧ (x&29 = 0)

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

  11101

-xxxxx---
 xxx0x

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

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

x &24

  11000
  000x0
---------
  00000

Условие x&24  ⁄= 0  не выполнится, так как для уже известных цифр чисел x  результат поразрядной конъюнкции будет равен 0.

x &47

  101111
  x000x0
----------
  x000x0

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

Для этих чисел x  должно быть истинным условие (x &A  ⁄= 0)  . Значит, в числе A  обязательно должны быть единицы в двоичном виде на разрядах 1 и 5 при нумерации с 0 справа налево. Значит наименьшее число A  имеет значение 1000102 =  3410   . Ответ 34.

Идея решения:

Перебираем целые неотрицательные A  с помощью цикла for. Для каждого A  проверяем тождественную истинность

((x&47  ⁄= 0 ) ∨ (x&24 ⁄= 0)) →  ((x &29 =  0) → (x&A  ⁄=  0))

для всех неотрицательных x  , используя вложенный цикл for. Для проверки поразрядной конъюнкции применяем оператор &. Если найдётся хотя бы одно x  , при котором формула ложна, текущее A  отбрасываем. Первое A  , для которого формула истинна для всех x  , будет искомым наименьшим.

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

# Перебор возможных значений A
for a in range(1000):
    # Флаг для проверки, найдено ли "ложное" значение x
    flag = True
    # Перебор всех неотрицательных x
    for x in range(10000):
        # Проверяем формулу с использованием операции & для поразрядной конъюнкции
        if (((x & 47 != 0) or (x & 24 != 0)) <= ((x & 29 == 0) <= (x & a != 0))) == False:
            # Нашлось x, для которого формула ложна
            flag = False
            break
    # Если формула истинна для всех x, выводим A и прекращаем поиск
    if flag:
        print(a)
        break

Ответ: 34

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

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

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

x&A  ⁄= 0 → ((x&17 = 0 ∧x&5 = 0) → x&3 ⁄= 0)

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

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

Идея решения:

Перебираем целые неотрицательные A  с помощью цикла for, начиная с больших значений, чтобы найти наибольшее. Для каждого A  проверяем тождественную истинность

x&A  ⁄=  0 → ((x&17  = 0 ∧ x&5  = 0) →  x&3  ⁄= 0)

для всех неотрицательных x  , используя вложенный цикл for. Для проверки поразрядной конъюнкции применяем оператор &. Если найдётся хотя бы одно x  , при котором формула ложна, текущее A  отбрасываем. Первое A  , для которого формула истинна для всех x  , и будет искомым наибольшим.

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

# Перебор возможных значений A, начиная с больших
for a in range(1000, 1, -1):
    # Флаг для проверки, найдено ли "ложное" значение x
    flag = True
    # Перебор всех неотрицательных x
    for x in range(0, 1000):
        # Проверяем формулу с использованием операции & для поразрядной конъюнкции
        if ((x & a != 0) <= (((x & 17 == 0) and (x & 5 == 0)) <= (x & 3 != 0))) == False:
            # Нашлось x, для которого формула ложна
            flag = False
            break
    # Если формула истинна для всех x, выводим A и прекращаем поиск
    if flag:
        print(a)
        break

Ответ: 23

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

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

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

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

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

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

Обозначим x&25  = 0 ⇔  Z25, x &17 = 0 ⇔ Z17, x &A  = 0 ⇔  ZA.  Перепишем: ----           ---
Z25 →  (Z17 →  ZA ) = 1  для любых x.

Воспользуемся тем, что         --     --
a → b = a ∨ b, a = a.  Тогда       ---- ---
Z25 ∨ Z17 ∨ ZA = 1.  Теперь воспользуемся тем же в обратную сторону: соберем импликацию. Получим (Z17 ∧ ZA ) → Z25 = 1.

Помним, что Z17 ∧ ZA = Z17 orA.  Тогда Z17orA →  Z25 =  1.

Переведем в двоичную систему счисления известные числа: 17 = 10001, 25 = 11001.

\(\)

r _& 10001;
∗ ∗ ∗ ∗∗ ;
11001

\(\)

Известно, что, чтобы данная импликация была равна 1, на тех местах, где в двоичной записи 25 стоят единички, в двоичной записи Z17 orA  должны тоже стоять единички.

Мы ищем наименьшее неотрицательное целое число A.  Значит, где вместо звездочек можно ставить нули, — будем ставить. Двигаемся справа налево. На место первой звездочки можно поставить 0 — единичка уже есть в записи числа 17. На втором месте все равно, что ставить, — в записи 25 на этом месте 0. Ставим 0. Аналогично ставим на третье место. Теперь посмотрим на четвертое: в записи 25 — стоит 1, а вот в записи 17 — 0. Значит, на четвертом месте в числе A  должна быть единичка. Аналогично заканчиваем ставить знаки. Никаких лишних разрядов впереди числа добавлять не будем — мы ищем наименьшее.

Итак, получили 1000. Это число в двоичной системе счисления. В десятичной — 8.

 

Идея решения:

Перебираем целые неотрицательные A  с помощью цикла for, начиная с малых значений, чтобы найти наименьшее. Для каждого A  проверяем тождественную истинность

(x&25  ⁄= 0) →  ((x&17 =  0) → (x &A  ⁄= 0))

для всех неотрицательных x  , используя вложенный цикл for. Для проверки поразрядной конъюнкции используем оператор &. Если найдётся хотя бы одно x  , при котором формула ложна, текущее A  отбрасываем. Первое A  , для которого формула истинна для всех x  , и будет искомым наименьшим.

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

# Перебор возможных значений A с начала диапазона
for a in range(0, 100):
    # Флаг для проверки, найдено ли "ложное" значение x
    flag = True
    # Перебор всех неотрицательных x
    for x in range(0, 10000):
        # Проверяем формулу с использованием операции & для поразрядной конъюнкции
        if ((x & 25 != 0) <= ((x & 17 == 0) <= (x & a != 0))) == False:
            # Нашлось x, для которого формула ложна
            flag = False
            break
    # Если формула истинна для всех x, выводим A и прекращаем поиск
    if flag:
        print(a)
        break

Ответ: 8

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

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

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

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

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

Идея решения:

Перебираем целые неотрицательные A  с помощью цикла for, начиная с малых значений, чтобы найти наименьшее. Для каждого A  проверяем тождественную истинность

((x&47 ⁄= 0)∨ (x &24 ⁄= 0)) → ((x&29 = 0) → (x&A ⁄= 0))

для всех неотрицательных x  , используя вложенный цикл for. Для проверки поразрядной конъюнкции используем оператор &. Если найдётся хотя бы одно x  , при котором формула ложна, сбрасываем цикл и текущее A  не подходит. Первое A  , для которого формула истинна для всех x  , и будет искомым наименьшим.

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

# Перебор возможных значений A с начала диапазона
for a in range(0, 100):
    # Флаг для проверки, данное A подходит
    flag = True
    # Перебор всех неотрицательных x
    for x in range(0, 10000):
        # Проверяем формулу с использованием операции & для поразрядной конъюнкции
        if (((x & 47 != 0) or (x & 24 != 0)) <= ((x & 29 == 0) <= (x & a != 0))) == False:
            # Сбрасываем цикл, данное A не подходит
            flag = False
            break
    # Если формула истинна для всех x, выводим A и прекращаем поиск
    if flag:
        print(a)
        break

Ответ: 34

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

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

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

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

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

Идея решения:

Перебираем целые неотрицательные A  с помощью цикла for, начиная с малых значений, чтобы найти наименьшее. Для каждого A  проверяем тождественную истинность

((x&17  ⁄= 0) ∧ (x &57 ⁄=  0)) → ((x&A  ⁄=  0) ∧ (x&17 ⁄= 0))

для всех неотрицательных x  , используя вложенный цикл for. Для проверки поразрядной конъюнкции используем оператор &. Если найдётся хотя бы одно x  , при котором формула ложна, сбрасываем цикл и текущее A  не подходит. Первое A  , для которого формула истинна для всех    x  , и будет искомым наименьшим.

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

# Перебор возможных значений A с начала диапазона
for a in range(1, 1000):
    # Флаг для проверки, данное A подходит
    flag = True
    # Перебор всех неотрицательных x
    for x in range(1000):
        # Проверяем формулу с использованием операции & для поразрядной конъюнкции
        if not(((x & 17 != 0) and (x & 57 != 0)) <= ((x & a != 0) and (x & 17 != 0))):
            # Сбрасываем цикл, данное A не подходит
            flag = False
            break
    # Если формула истинна для всех x, выводим A и прекращаем поиск
    if flag:
        print(a)
        break

Ответ: 17

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

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

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

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

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

Идея решения:

Перебираем целые неотрицательные A  с помощью цикла for, начиная с малых значений, чтобы найти наименьшее. Для каждого A  проверяем тождественную истинность

((x&29  ⁄= 0) ∧ (x &18 ⁄=  0)) → ((x&A  ⁄=  0) ∧ (x&29 ⁄= 0))

для всех неотрицательных x  , используя вложенный цикл for. Для проверки поразрядной конъюнкции используем оператор &. Если найдётся хотя бы одно x  , при котором формула ложна, сбрасываем цикл и текущее A  не подходит. Первое A  , для которого формула истинна для всех    x  , и будет искомым наименьшим.

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

# Перебор возможных значений A с начала диапазона
for a in range(1, 1000):
    # Флаг для проверки, данное A подходит
    flag = True
    # Перебор всех неотрицательных x
    for x in range(1000):
        # Проверяем формулу с использованием операции & для поразрядной конъюнкции
        if not(((x & 29 != 0) and (x & 18 != 0)) <= ((x & a != 0) and (x & 29 != 0))):
            # Сбрасываем цикл, данное A не подходит
            flag = False
            break
    # Если формула истинна для всех x, выводим A и прекращаем поиск
    if flag:
        print(a)
        break

Ответ: 18

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

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

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

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

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

Идея решения:

Перебираем целые неотрицательные A  с помощью цикла for, начиная с больших значений, чтобы найти наибольшее. Для каждого A  проверяем тождественную истинность

((x&17  ⁄= 0 ) ∨ (x&A ⁄=  0)) → (x&17  ⁄= 0) ∨ ((x &A  ⁄= 0) ∧ (x &41 =  0))

для всех неотрицательных x  , используя вложенный цикл for. Для проверки поразрядной конъюнкции используем оператор &. Если найдётся хотя бы одно x  , при котором формула ложна, сбрасываем цикл и текущее A  не подходит. Первое A  , для которого формула истинна для всех    x  , и будет искомым наибольшим.

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

# Перебор возможных значений A с конца диапазона
for a in range(1000, 1, -1):
    # Флаг для проверки, данное A подходит
    flag = True
    # Перебор всех неотрицательных x
    for x in range(1000):
        # Проверяем формулу с использованием операции & для поразрядной конъюнкции
        if not(((x & 17 != 0) or (x & a != 0)) <= ((x & 17 != 0) or ((x & a != 0) and (x & 41 == 0)))):
            # Сбрасываем цикл, данное A не подходит
            flag = False
            break
    # Если формула истинна для всех x, выводим A и прекращаем поиск
    if flag:
        print(a)
        break

Ответ: 17

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

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

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

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

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

x &A  ⁄= 0 →  (x&14 =  0 →  x&3 ⁄=  0)

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

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

Идея решения:

Перебираем целые неотрицательные A  с помощью цикла for, начиная с больших значений, чтобы найти наибольшее. Для каждого A  проверяем тождественную истинность

x &A  ⁄= 0 →  (x&14 =  0 →  x&3 ⁄=  0)

для всех неотрицательных x  , используя вложенный цикл for. Для проверки поразрядной конъюнкции используем оператор &. Если найдётся хотя бы одно x  , при котором формула ложна, сбрасываем цикл и текущее A  не подходит. Первое A  , для которого формула истинна для всех    x  , и будет искомым наибольшим.

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

# Перебор возможных значений A с конца диапазона
for a in range(1000, 1, -1):
    # Флаг для проверки, данное A подходит
    flag = True
    # Перебор всех неотрицательных x
    for x in range(1000):
        # Проверяем формулу с использованием операции & для поразрядной конъюнкции
        if not((x & a != 0) <= ((x & 14 == 0) <= (x & 3 != 0))):
            # Сбрасываем цикл, данное A не подходит
            flag = False
            break
    # Если формула истинна для всех x, выводим A и прекращаем поиск
    if flag:
        print(a)
        break

Ответ: 15

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

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

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

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

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

x &A  ⁄= 0 →  (x&10 =  0 →  x&5 ⁄=  0)

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

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

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

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

(x &A  = 0) ∨ (x&10 ⁄=  0) ∨ (x &5 ⁄= 0 )

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

(x&A  = 0) ∨ ((x&10 ⁄=  0) ∨ (x &5 ⁄= 0 ))

Сделаем отрицание известной части, чтобы найти те значения x  , которые будут давать истину для отрицания. Тогда они будут обязаны выполняться для условия с A  : ((x&A  ⁄= 0)

(x&10  = 0) ∧ (x&5 =  0)

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

  1010
  xxxx
--------
  x0x0

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

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

  0101

--0x0x--
  0b0b

Условие (x&5 =  0)  выполнится, если все цифры на месте b  будут равны 0. Значит в числах   x  обязательно должны быть нули в 2 и 0 разрядах. Выпишем числа x  , которые дают истину для отрицания известной части: 0000  .

Для всех таких чисел x  должно быть истинным условие (x&A  = 0)  . Значит, двоичная запись числа A  может иметь вид ...0xxxx  , чтобы при поразрядной конъюнкции с любым числом x  получался в результате 0. Значит наибольшее число A  имеет значение 11112 = 1510   . Ответ 15  .

 

Идея решения:

Перебираем целые неотрицательные A  с помощью цикла for, начиная с больших значений, чтобы найти наибольшее. Для каждого A  проверяем тождественную истинность

x &A  ⁄= 0 →  (x&10 =  0 →  x&5 ⁄=  0)

для всех неотрицательных x  , используя вложенный цикл for. Для проверки поразрядной конъюнкции применяем оператор &. Если найдётся хотя бы одно x  , при котором формула ложна, сбрасываем цикл и текущее A  не подходит. Первое A  , для которого формула истинна для всех    x  , будет искомым наибольшим.

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

# Перебор возможных значений A с конца диапазона
for a in range(1000, 1, -1):
    # Флаг для проверки, данное A подходит
    fl = 0
    # Перебор всех неотрицательных x
    for x in range(1000):
        # Проверяем формулу с использованием поразрядной конъюнкции
        if ((x & a != 0) <= ((x & 10 == 0) <= (x & 5 != 0))) == 0:
            # Сбрасываем цикл, данное A не подходит
            fl = 1
            break
    # Если формула истинна для всех x, выводим A и прекращаем поиск
    if not fl:
        print(a)
        break

Ответ: 15

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

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

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

x &A  ⁄= 0 →  (x&10 =  0 →  x&5 ⁄=  0)

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

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

Преобразуем выражение к виду Z10Z5 →  ZA  с помощью законов де Моргана:

(x &A  = 0) ∨ (x&10 ⁄=  0) ∨ (x &5 ⁄= 0)

(x &10 =  0 ∧  x&5  = 0) →  (x &A  = 0)

Заметим, что если A  = 0  , то последнее выражение всегда 0  , а следовательно последняя скобка всегда 0  , то есть выражение имеет вид:

X →  1  , а это всегда истинно.

Нам нужно минимальное неотрицательное целое число A  , значит наш ответ 0  .

 

Идея решения:

Перебираем целые неотрицательные A  с помощью цикла for, начиная с малых значений, чтобы найти наименьшее. Для каждого A  проверяем тождественную истинность

x &A  ⁄= 0 →  (x&10 =  0 →  x&5 ⁄=  0)

для всех неотрицательных x  , используя вложенный цикл for. Для проверки поразрядной конъюнкции применяем оператор &. Если найдётся хотя бы одно x  , при котором формула ложна, сбрасываем цикл и текущее A  не подходит. Первое A  , для которого формула истинна для всех    x  , будет искомым наименьшим.

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

# Перебор возможных значений A
for a in range(1000):
    # Флаг для проверки, подходит ли текущее A
    fl = 0
    # Перебор всех неотрицательных x
    for x in range(1000):
        # Проверка формулы с использованием поразрядной конъюнкции
        if ((x & a != 0) <= ((x & 10 == 0) <= (x & 5 != 0))) == 0:
            # Сбрасываем цикл, данное A не подходит
            fl = 1
            break
    # Если A подходит для всех x, выводим его и прекращаем поиск
    if not fl:
        print(a)
        break

Ответ: 0

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

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

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

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

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

x&38 = 0 → (x&55 ⁄= 0 → x&A  ⁄= 0)

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

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

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

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

(x&38 ⁄= 0)∨ (x&55 = 0) ∨(x&A  ⁄= 0)

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

((x&38 ⁄= 0)∨ (x&55 = 0))∨ (x&A ⁄= 0)

Сделаем отрицание известной части, чтобы найти те значения x  , которые будут давать истину для отрицания. Тогда они будут обязаны выполняться для условия с A  : ((x&A  ⁄= 0)

(x&38 = 0) ∧(x&55 ⁄= 0)

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

  100110

--xxxxx--
 x00xx0

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

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

  110111

--0xx00x--
 0b000b

Условие (x&55 ⁄= 0)  выполнится, если хотя бы одна цифра на месте b  будет равна 1. Значит в числах x  обязательно должна быть единица в 0 и/или 4 разряде. Выпишем числа x  , которые дают истину для отрицания известной части: 10000  , 10001  , 00001  .

Для всех таких чисел x  должно быть истинным условие (x&A ⁄= 0)  . Значит, двоичная запись числа A  обязательно должна иметь вид ...xx1xxx1  , чтобы при поразрядной конъюнкции с любым числом x  получался в результате хотя бы один разряд 1. Значит наименьшее число A  имеет значение 100012 = 1710  . Ответ 17  .

Идея решения:

Перебираем целые неотрицательные A  с помощью цикла for, начиная с малых значений, чтобы найти наименьшее. Для каждого A  проверяем тождественную истинность

x&38 = 0 → (x&55 ⁄= 0 → x&A  ⁄= 0)

для всех неотрицательных x  , используя вложенный цикл for. Для проверки поразрядной конъюнкции применяем оператор &. Если найдётся хотя бы одно x  , при котором формула ложна, сбрасываем цикл и текущее A  не подходит. Первое A  , для которого формула истинна для всех x  , будет искомым наименьшим.

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

# Функция проверки тождественной истинности формулы для заданного A
def f(a):
    # Перебор всех неотрицательных x
    for x in range(1, 1000):
        # Проверяем формулу с использованием поразрядной конъюнкции
        if ((x & 38 == 0) <= ((x & 55 != 0) <= (x & a != 0))) == 0:
            # Сбрасываем цикл, данное A не подходит
            return False
    # Формула истинна для всех x
    return True

# Перебор возможных значений A для нахождения наименьшего
for a in range(1, 1000):
    if f(a):
        print(a)
        break

Ответ: 17

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

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

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

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

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

x&65 = 0 → (x&91 ⁄= 0 → x&A  ⁄= 0)

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

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

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

6510 = 10000012

91  = 1011011
  10         2

Враги хотят подобрать x  такой, что x&65 = 0,x&91 ⁄= 0,x&A = 0  . Тогда на всех разрядах где у 65 единички будут нули и в одном из разрядов или в двух одновременно (где у 65 в двоичной записи нули, а у 91 единички) будут единички. Во всех остальных разрядах будут нули чтобы была больше вероятность истинности x&A  = 0  .

Тогда друзья чтобы x&A  ⁄= 0  поставят единички где они гарантированно могут появится в x  . Это будет число 110102 = 26  .

 

Идея решения:

Перебираем целые неотрицательные A  с помощью цикла for, начиная с малых значений, чтобы найти наименьшее. Для каждого A  проверяем тождественную истинность

x&65 = 0 → (x&91 ⁄= 0 → x&A  ⁄= 0)

для всех неотрицательных x  , используя вложенный цикл for. Для проверки поразрядной конъюнкции применяем оператор &. Если найдётся хотя бы одно x  , при котором формула ложна, сбрасываем цикл и текущее A  не подходит. Первое A  , для которого формула истинна для всех x  , будет искомым наименьшим.

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

# Функция проверки тождественной истинности формулы для заданного A
def f(a):
    # Перебор всех неотрицательных x
    for x in range(1, 1000):
        # Проверяем формулу с использованием поразрядной конъюнкции
        if ((x & 65 == 0) <= ((x & 91 != 0) <= (x & a != 0))) == 0:
            # Сбрасываем цикл, данное A не подходит
            return False
    # Формула истинна для всех x
    return True

# Перебор возможных значений A для нахождения наименьшего
for a in range(1, 1000):
    if f(a):
        print(a)
        break

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