15.07 Прочие прототипы
Ошибка.
Попробуйте повторить позже
Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». Обозначим
через поразрядную конъюнкцию неотрицательных целых чисел
и
.
Так, например, .
На числовой прямой дан отрезок и множество
.
Определите наименьшее натуральное число , такое что выражение
тождественно истинно, то есть принимает значение 1 при любом целом значении переменной х.
Решение программой
1. Мы создаем функцию inn(x, P), которая проверяет, принадлежит ли число отрезку
. Это необходимо для
удобной проверки условий формулы в Python.
2. Определяем функцию f(x, A), которая возвращает True, если формула выполняется для конкретного и
выбранного
:
- Проверяем, что не делится на 5 и не принадлежит множеству
(правая часть импликации активна только если
оба условия выполняются);
- Проверяем, что если , то
, иначе условие считается истинным;
- Проверяем, что поразрядная конъюнкция равна нулю, что также делает выражение истинным.
3. Перебираем значения начиная с 1. Для каждого
:
- Инициализируем флаг flag = True, который показывает, что формула пока истинна для всех ;
- Проверяем все в диапазоне от -100 до 999 (широкий диапазон для проверки отрицательных и положительных
значений);
- Если для какого-то формула ложна, устанавливаем flag = False и прерываем цикл по
.
4. Если после проверки всех флаг остался True, текущее
является наименьшим, удовлетворяющим условию.
Выводим
и прерываем цикл перебора.
# Функция для проверки принадлежности x отрезку P def inn(x, A): # Проверяем, находится ли x между A[0] и A[1] return A[0] <= x <= A[1] # Функция для проверки истинности формулы при конкретном x и A def f(x, A): S = {43, 23, 76} # Множество S Q = [8, 48] # Отрезок Q # Проверяем импликацию: если x не делится на 5 и x не в S, то выполняется одно из условий правой части return (((x % 5 != 0) and (not (x in S))) <= (((abs(x - 40) <= 11) <= (inn(x, Q))) or (x & A == 0))) # Перебор возможных значений A от 1 до 999 for A in range(1, 1000): # Флаг, показывающий, что формула истинна для всех x при текущем A flag = True # Перебор значений x от -100 до 999 for x in range(-100, 1000): # Если формула ложна для x, меняем флаг и прерываем цикл if not f(x, A): flag = False break # Если формула истинна для всех x, выводим найденное минимальное A и завершаем поиск if flag: print(A) break
Специальные программы

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

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

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

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

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

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