Обозначим через поразрядную конъюнкцию неотрицательных целых чисел
и
Так, например,
Для какого наибольшего неотрицательного целого числа формула
тождественно истинна (т.е. принимает значение
при любом неотрицательном целом значении переменной
)?
Введем обозначение: Тогда наше выражение имеет вид:
Так как получаем
Так как
Тогда посчитаем
Тогда наше выражение имеет вид Это то же самое, что
Мы сразу можем определить, истинна ли
Нет, не истинна, т.к. на первом месте, например, в двоичной записи 17 стоит 0, а на первом в двоичной записи 58 — 1. Значит, нужно, чтобы истинна была импликация
Мы ищем наибольшее Чтобы импликация истинна, на тех местах, где в двоичной записи A стоят единицы, стоят единицы и в двоичной записи 17. То есть больше единиц, чем есть в 17, в записи
быть не может. Тогда наибольшее
— это и есть само 17.
Программное решение
for a in range(1,1000):
flag = True
for x in range(10000):
if (((x & 23 == 0) or (x & 17 == 0)) <= ((x & 58 != 0) <= (x & a == 0))) == False:
flag = False
break
if flag == True:
print(a)