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

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

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

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

Задача 1#63686

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

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

(Д ЕЛ (x,5)∧ Д ЕЛ(x,11)) → ((x&17 ⁄= 0)∨ (x &64 = 0) ∨(A ⋅x ≤ 190387))

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

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

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

1. Мы будем перебирать значения A  от 0 до 999, чтобы найти максимальное, при котором формула истинна для всех x  от 1 до 1000.

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

- Проверяем, делится ли x  на 5 и 11 одновременно.

- Если да, проверяем, что хотя бы одно из условий истинно:

* x&17 ⁄= 0  (поразрядная конъюнкция с 17 не равна 0),

* x&64 = 0  (поразрядная конъюнкция с 64 равна 0),

* A ⋅x ≤ 190387  .

3. Для каждого A  проверяем все x  от 1 до 1000:

- Если хотя бы для одного x  формула ложна, текущее A  не подходит.

- Используем переменную flag для фиксации состояния проверки.

4. Если формула истинна для всех x  , обновляем максимальное найденное A  и продолжаем перебор, чтобы найти ещё большее значение.

# Перебор всех x для проверки формулы при текущем A
def f(x):
    # Проверяем истинность выражения для конкретного x и текущего A
    return (((x % 5 == 0) and (x % 11 == 0)) <= \
        (((x & 17 != 0) or (x & 64 == 0)) or (A * x <= 190387)))

# Инициализируем переменную для хранения максимального A
ans = 0

# Перебираем все возможные значения A от 0 до 999
for A in range(1000):
    # Флаг: True если формула тождественно истинна для всех x при текущем A
    flag = True
    # Проверяем все x от 1 до 1000
    for x in range(1, 1001):
        # Если формула ложна хотя бы для одного x
        if not f(x):
            flag = False  # Меняем флаг
            break  # Прерываем цикл по x, так как текущий A не подходит
    # Если формула истинна для всех x, обновляем максимальное A
    if flag:
        ans = max(ans, A)
# Выводим найденное максимальное значение A
print(ans)

Ответ: 576

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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