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

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

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

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

Задача 1#6042

Обозначим через 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

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение

Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты

Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей

Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

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