Тема 15. Алгебра логики – преобразование логических выражений

15.07 Прочие прототипы

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела алгебра логики – преобразование логических выражений
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#63692

Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». Обозначим через m&n  поразрядную конъюнкцию неотрицательных целых чисел m  и n  .

На числовой прямой даны отрезки Q = [16;64]  и P = [48,96]  .

Определите наименьшее натуральное число A  , такое что выражение

ДЕ Л(x,10)∨ (x ∕∈ Q)∨ (x&A = 0) ∨((x ∈ P ) → (|x− 30| ≥ 20))

тождественно истинно, то есть принимает значение 1 при любом целом значении переменной х.

Показать ответ и решение

Решение программой

1. Мы определяем функцию inn(x, P), которая проверяет, принадлежит ли число x  отрезку P  . Это необходимо для удобной проверки условий формулы в Python.

2. Создаем функцию f(x, A), которая возвращает True, если формула выполняется для конкретного x  и выбранного A  :

- Проверяем, делится ли x  на 10;

- Проверяем, не принадлежит ли x  отрезку Q  ;

- Проверяем, что поразрядная конъюнкция x&A  равна нулю;

- Если x ∈ P  , проверяем, что |x− 30| ≥ 20  .

3. Перебираем значения A  начиная с 1. Для каждого A  :

- Инициализируем флаг flag = True, который показывает, что формула пока истинна для всех x  ;

- Проверяем все x  в диапазоне от -1000 до 999 (можно брать широкий диапазон, включающий отрицательные и положительные числа);

- Если для какого-то x  формула ложна, устанавливаем flag = False и прерываем цикл по x  .

4. Если после проверки всех x  флаг остался True, текущее A  является наименьшим, удовлетворяющим условию. Выводим A  и прерываем цикл перебора.

# Функция для проверки принадлежности 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

Ответ: 2

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

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

Бесплатное онлайн-обучение

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

Налоговые вычеты

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

Специальное предложение
для учителей

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

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!