15.07 Прочие прототипы
Ошибка.
Попробуйте повторить позже
Обозначим через ДЕЛ(,
) утверждение «натуральное число
делится без остатка на натуральное число
».
На числовой прямой дан промежуток и множество
.
Определите максимальную длину промежутка , такого что его правая граница не больше
и выражение
тождественно истинно, то есть принимает значение при любых натуральных значениях переменных
,
.
Решение программой
1. Мы создаем функцию inn(x, A), которая проверяет, принадлежит ли число промежутку
. Эта функция
возвращает True, если
находится между границами
, и False в противном случае. Это позволяет удобно проверять
условия
и
.
2. Определяем функцию f(x, y, A), которая проверяет истинность формулы для конкретных значений ,
и
отрезка
:
- Проверяем, что не делится на 5 и
, тогда должно выполняться условие
;
- Объединяем с проверкой дополнительной части формулы: , либо
, либо
;
- Если хотя бы одно из условий истинно, функция возвращает True, что соответствует тождественной истинности для
данной пары .
3. Задаем дискретизацию чисел для отрезка с шагом
, где
, чтобы корректно работать с дробными
числами при проверках и обеспечить возможность точного перебора всех кандидатов для
.
4. Перебираем все возможные начала и концы
отрезка
в диапазоне от
до
, учитывая
дискретизацию:
- Для каждого кандидата проверяем формулу для всех натуральных чисел
и
в диапазоне
,
;
- Если формула ложна хотя бы для одной пары , отрезок
отбрасывается.
5. Если формула выполняется для всех , вычисляем длину текущего отрезка
и обновляем максимальную
длину, если она больше предыдущей найденной.
6. После перебора всех вариантов выводим максимальную длину промежутка .
# Функция проверки принадлежности x промежутку A def inn(x, A): # Возвращает True, если x находится между границами A[0] и A[1] return A[0] <= x <= A[1] # Функция проверки истинности формулы для конкретных x, y и промежутка A def f(x, y, A): S = {25, 28, 45, 48, 57, 67} # Множество S # Проверяем первую часть формулы: если x не делится на 5 и y не в S, то x>5 => y>13 # Объединяем с дополнительными условиями: x*y <= 67, x не в A или y не в A return (((x % 5 != 0) and (not y in S)) <= ((x > 5) <= (y > 13))) \ or (x * y <= 67) or (not inn(x, A)) or (not inn(y, A)) # Задаем дискретизацию для перебора дробных значений отрезка A n = 5 ans = 0 # Максимальная длина промежутка A # Перебор начала отрезка a с учетом дискретизации for a in range(1 * n, 50 * n): # Перебор конца отрезка b с учетом, что правая граница не больше 50 for b in range(a, 50 * n + 1): # +1 чтобы проверить саму точку b A = [a / n, b / n] # Создаем текущий отрезок A flag = True # Флаг, показывающий, что формула выполняется для всех x и y # Перебор всех натуральных 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): flag = False break # Прерываем цикл по x, если флаг равен False if not flag: break # Если формула выполняется для всех (x, y), обновляем максимальную длину if flag: ans = max(ans, A[1] - A[0]) # Выводим максимальную длину промежутка A print(ans)
Видим, что программа выдаёт результат 36.8 – это значит, что ответ стремится к 37.
Специальные программы

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

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

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

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

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

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