Обозначим через
Так, например,
тождественно истинна (т. е. принимает
Приведем аналитическое решение Юрия Красильникова.
Преобразуем исходное выражение
исключив импликацию:
Число 29 в двоичном представлении — это 11101.
Если число x не содержит единиц
С другой стороны, если единицы будут в разрядах
Следовательно, два левых выражения будут ложными, если в числе x есть единицы в разрядах, которые есть
Решим задание с помощью языка программирования PascalABC методом перебора:
var
A, x: integer;
B: boolean;
begin
for A := 0 to 32 do begin
B := True;
for x := 0 to 32 do
if not (((x and 29) = 0) or ((x and 17) <> 0) or ((x and A) <> 0)) then
B := False;
if B then begin
writeln(A);
break;
end;
end;
end.
Ответ: 12.
Приведем аналогичную программу на языке Python (Владимир Юрьевич Ламок).
ok=1
A=set()
for a in range (1, 65):
ok=1
for x in range (0, 65):
if ((x & 29 != 0) <= ((x & 17 == 0) <= (x & a != 0))) == 0:
ok=0
if ok:
A.add(a)
break
print(min(A))
Заметим, что можно было перебирать числа
Приведём другое решение на языке Python.
for A in range(0, 1000):
flag = True
for x in range(1000):
f = (x & 29 != 0) <= ((x & 17 == 0) <= (x & A != 0))
if not(f):
flag = False
break
if flag:
print(A)
break
Приведём другое решение на языке Python.
for a in range(0, 1000):
k = 0
for x in range(0, 1000):
if (x & 29 != 0) <= ((x & 17 == 0) <= (x & a != 0)):
k += 1
if k == 1000:
print(a)
break
Приведём решение Ильи Андрианова на языке Python.
def F(x, A):
return (x & 29 != 0) <= ((x & 17 == 0) <= (x & A != 0))
for A in range(0, 1000):
if all(F(x, A) for x in range(0, 10000)):
print(A)
break

