15.04 Побитовая конъюнкция
Ошибка.
Попробуйте повторить позже
Обозначим через поразрядную конъюнкцию неотрицательных целых чисел
и
Так,
например,
Для какого наибольшего неотрицательного целого числа формула
тождественно истинна (т.е. принимает значение
при любом неотрицательном целом значении переменной
)?
Введем обозначение: Тогда наше выражение имеет вид:
Так как получаем
Так как
Тогда посчитаем
Тогда наше выражение имеет вид Это то же самое, что
Мы сразу можем определить, истинна ли
Нет, не истинна, т.к. на первом месте, например, в двоичной записи 17 стоит 0, а на первом в
двоичной записи 58 — 1. Значит, нужно, чтобы истинна была импликация
Мы ищем наибольшее Чтобы импликация истинна, на тех местах, где в двоичной записи A стоят
единицы, стоят единицы и в двоичной записи 17. То есть больше единиц, чем есть в 17, в записи
быть не может. Тогда наибольшее
— это и есть само 17.
Идея решения:
Перебираем целые неотрицательные значения с помощью цикла for, чтобы найти наибольшее
подходящее. Для каждого
проверяем тождественную истинность выражения
для всех неотрицательных целых , перебирая их с помощью вложенного цикла for. Для проверки
условия поразрядной конъюнкции чисел используем операцию &. Если найдётся хотя бы одно значение
, для которого выражение ложно, текущее
отбрасываем. Первое
, для которого выражение
истинно для всех перебранных
, и будет искомым наибольшим.
Решение программой:
# Перебор возможных значений 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
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

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

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

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

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

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!