Обозначим через ДЕЛ() утверждение «натуральное число
делится без остатка на натуральное число
».
Для какого наименьшего натурального числа формула
Запишем, чего хотят враги:
Исходя из этого уменьшим поиск по нечетным и четным значениям соответственно:
Решение (прогой, работает пару минут):
for A in range(1, 10000):
flag = True
for x in range(5, (4095 + 1)*2 + 1, 2):
for y in range(2, 4095 + 1, 2):
if x*y % A == 0:
flag = False
break
if not flag:
break
if flag:
print(A)
break
Решение (ручками):
Повторим, чего хотят враги:
Друзья хотят, чтобы выполнялось условие при всех хотелках врага. Соответственно, нужно понять, когда же произведение
не будет делиться на
.
Исходя из хотелок врага мы понимаем, что будут подбираться такие , чтобы они делились на
. Это значит, что
будет содержать внутри себя делители хотя бы одного набора
. Наша задача — предоставить такое
, чтобы при любом произведении
там не было такого делителя, что и в
.
Заметим, что — четные числа. Значит, в самых больших
будет содержаться максимум
умноженное на что-то. Тогда, чтобы минимизировать
возьмем
(т.к.
в степени что-то будет явно меньше, чем числа большие в степени что-то).