Обозначим через поразрядную конъюнкцию неотрицательных целых чисел
и
.
Так, например, .
Для какого наибольшего целого числа формула
тождественно истинна (т. е. принимает значение 1 при любом неотрицательном целом значении переменной )?
Решение аналитически
Для начала упростим данное выражение раскрыв импликацию и отрицание:
Отделим скобками известную часть выражения от части с :
Сделаем отрицание известной части, чтобы найти те значения , которые будут давать истину для отрицания.
Выпишем поразрядную конъюнкцию :
Значит для истинности отрицания числа должны в двоичном виде принимать вид
, где x – любая цифра.
Теперь выпишем поразрядную конъюнкцию с учётом известных цифр в числах
:
Условие выполнится, если на месте
будет стоять 0. Значит в числах
обязательно должен быть ноль в 1 и 3 разряде. Тогда, все
, которые дают истину для отрицания известной части имеют вид:
.
Для всех таких чисел должно быть истинным условие
. Значит, двоичная запись числа
обязательно должна иметь вид
, чтобы при поразрядной конъюнкции с любым числом
все разряды были нулями.
Тогда, чтобы найти наибольшее значение , подставим на место x единицы:
.
Решение программой:
def f(a):
for x in range(1000):
if ((x & a == 0) or ((x & 74 == 0) <= (x & 65 != 0))) == 0:
return False
return True
for a in range(1000, 0, - 1):
if f(a):
print(a)
break