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

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

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

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

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

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

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