15.06 Смешанное
Ошибка.
Попробуйте повторить позже
Обозначим через ДЕЛ(,
) утверждение «натуральное число
делится без остатка на натуральное число
».
На числовой прямой дан промежуток и множество
.
Определите максимальную длину промежутка , такого что его правая граница не больше
и выражение
тождественно истинно, то есть принимает значение при любых натуральных значениях переменных
,
.
Решение аналитикой
Система для врагов:
Враги мечтают, чтобы ,
и
. Тогда при
единственные
, которые смогут взять
враги, чтобы условие
выполнялось, будут равны
и
. Заметит, что при увеличении
враги смогут брать больше вариантов
, но всегда максимальное значение
. Все натуральные
не принадлежат
, значит условие
автоматически выполнено. Мечты врагов такие: «Вот бы
».
Друзья говорят: «Нет, ». Тогда при условии, что правая граница отрезка
не больше
,
(чтобы даже
), а его максимальная длина равна
.
Решение программой
Мы решаем задачу перебором, чтобы найти максимальную длину промежутка , при которой заданное логическое
выражение верно для всех натуральных
и
. Идея решения заключается в следующем:
1. Мы создаём вспомогательную функцию inn(x, A), которая проверяет, принадлежит ли число промежутку
.
- Функция возвращает True, если , иначе False.
2. Мы создаём функцию f(x, y, A), которая вычисляет логическое выражение для конкретной пары и
заданного промежутка
:
- Множество задаём как S = {23, 27, 45, 46, 47, 67}.
- Проверяем условие:
- если не делится на 3 и
, тогда
влечёт
,
- либо ,
- либо не в
,
- либо не в
.
- Все эти условия объединяем логическим or, чтобы получить итоговое значение функции.
3. Для поиска максимальной длины промежутка используем масштабирование, чтобы работать с дробными значениями промежутка:
- Задаём n = 5 — делитель для дробного шага.
- Переменная ans хранит текущую максимальную длину промежутка.
4. Перебор всех возможных промежутков:
- Цикл for a in range(1 * n, 50 * n) перебирает левую границу с шагом
.
- Цикл for b in range(a, 50 * n + 1) перебирает правую границу так, чтобы
.
- Промежуток задаём как A = [a / n, b / n].
- Для каждого промежутка устанавливаем flag = True, предполагая, что промежуток подходит.
5. Проверка логического выражения для всех и
в разумных диапазонах:
- Внешний цикл for x in range(1, 100) перебирает .
- Внутренний цикл for y in range(1, 15) перебирает .
- Если выражение f(x, y, A) ложно, устанавливаем flag = False и прерываем внутренний цикл.
- Если flag стал False, прерываем цикл по , так как промежуток
не подходит.
6. Если после всех проверок flag = True, обновляем ans, используя ans = max(ans, A[1] - A[0]).
7. В конце выводим максимальную найденную длину промежутка .
# Функция проверяет, принадлежит ли x промежутку A def inn(x, A): return A[0] <= x <= A[1] # Функция вычисляет логическое выражение для x, y и A def f(x, y, A): S = {23, 27, 45, 46, 47, 67} return (((x % 3 != 0) and (not y in S)) <= ((x > 7) <= (y > 11))) \ or (x * y <= 76) or (not inn(x, A)) or (not inn(y, A)) # Масштабирование для дробного шага n = 5 # Переменная для хранения максимальной длины промежутка ans = 0 # Перебор возможных левых границ промежутка for a in range(1 * n, 50 * n): # Перебор возможных правых границ промежутка for b in range(a, 50 * n + 1): # +1 чтобы проверить саму точку b # Задаём промежуток A A = [a / n, b / n] # Предполагаем, что промежуток подходит flag = True # Проверяем все x от 1 до 99 for x in range(1, 100): # Проверяем все y от 1 до 14 for y in range(1, 15): # Если выражение ложно для текущих x и y if not f(x, y, A): # Устанавливаем флаг в False flag = False # Прерываем цикл по y break # Если флаг False, прерываем цикл по x if not flag: break # Если выражение истинно для всех x и y, обновляем максимальную длину if flag: ans = max(ans, A[1] - A[0]) # Выводим максимальную длину подходящего промежутка print(ans)
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!
Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение
Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты
Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей
Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!