Как решать задание 15 ЕГЭ (поразрядная конъюнкция, отрезки)?
Задание 15 про логическое выражение с поразрядной конъюнкцией (битовое И) и делимостью, где надо найти наибольшее A, чтобы выражение было истинно для всех x. Несколько отрезков ДЕЛ путают. Как решать задание 15?
2 ответа
Задание 15 — выражение с предикатами ДЕЛ(x, n) (x делится на n) и поразрядной конъюнкцией (&), истинное для ВСЕХ натуральных x. Нужно найти, например, наибольшее A.
Главный приём — перебор A на Python. Не пытайся решать логикой, это долго и легко ошибиться. Берёшь формулу как есть, перебираешь A, и для каждого A проверяешь, что выражение истинно на всех x из достаточно большого диапазона.
def P(x, A):
# выражение из условия, например:
# (ДЕЛ(x,A)) -> ( (НЕ ДЕЛ(x,6)) или (ДЕЛ(x,9)) )
delA = (x % A == 0)
return (not delA) or ((x % 6 != 0) or (x % 9 == 0))
for A in range(1, 1000):
if all(P(x, A) for x in range(1, 10000)):
ans = A # если нужно наибольшее — не break, бери последнее
print(ans)
Для поразрядной конъюнкции в условии используешь оператор &, а сравнение — обычно (x & A) ....
Про «несколько отрезков»: когда выражение собрано из условий вида «x в [a,b] или x в [c,d]», ответ может быть суммой длин нескольких непересекающихся отрезков числовой прямой — будь внимателен, их бывает несколько, складывай аккуратно.
Частые ошибки: мал диапазон перебора x (бери с запасом, до 10000–100000); перепутать импликацию; искать наименьшее вместо наибольшего (или наоборот). Перечитай, что именно требуется.
Ключевой риск задания 15 — слишком узкий диапазон проверки x. Если проверяешь x только до 100, можешь поймать ложно-истинное A. Бери диапазон с большим запасом (десятки тысяч), особенно если в формуле большие делители.
И когда в задаче несколько условий-отрезков на оси, ответ — суммарная длина всех подходящих кусков. Их реально бывает несколько штук, не остановись на первом.