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

15.06 Смешанное

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

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

Задача 1#25559

Обозначим через Q%m  ==  n  утверждение «Натуральное число Q  при делении на натуральное число m  даёт остаток n  ».

Для какого наименьшего целого числа A  формула

(x < A )∨ (y < A) ∨((x∗ y)%4 == 0)∨ (2x+ 3y ⁄= 100)

тождественно истинна (т. е. принимает значение 1  при любых целых неотрицательных значениях переменных   x  , y  )?

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

Аналитическое решение

Для того, чтобы решить данную задачу, найдём отрицание известной части (которая не зависит от A  ). Получим:

(
{ (x⋅y)%4 ⁄= 0
(
  2x +3y = 100

Найдём, при каких значениях x  и y  будут выполняться оба этих условия (x ⋅y)%4 ⁄= 0  и 2x + 3y = 100  :

|---|---|
|-x-|-y-|
| 5 |30 |
|---|---|
|11-|26-|
|17-|22-|
|23 |18 |
|---|---|
|29-|14-|
|35-|10-|
|41 | 6 |
|---|---|
-47---2-|

Все найденные пары (x;y)  должны давать истину в неизвестной части (которая зависит от   ), то есть давать истину для одного условий x < A  или y < A  . Исходя из найденных пар, можно из 3 первых пар сверху брать x  для условия, тогда будет истина при 17 < A  . Для последующих пар можно брать y  для условия, тогда будет истина при 18 < A  . Таким образом, нужно, чтобы выполнялось условие 18 < A  , а значит наименьшее подходящее значение A  равно 19

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

Мы решаем задачу перебором, чтобы найти наименьшее число A  , при котором заданное логическое выражение верно для всех неотрицательных целых x  и y  . Идея решения заключается в следующем:

1. Мы перебираем возможные значения A  от 0 до 999, чтобы гарантировать, что подходящее A  будет найдено.

- Для каждого значения A  мы предполагаем, что оно подходит, и создаём логический флаг flag, который изначально равен True.

2. Для каждого A  мы перебираем все значения x  от 0 до 999 с помощью цикла for x in range(1000).

- Для каждого x  мы перебираем все значения y  от 0 до 999 с помощью вложенного цикла for y in range(1000).

- Для каждой пары (x,y)  мы вычисляем логическое выражение

(x < A) ∨(y < A)∨ ((x ∗y)%4 ==  0)∨(2x + 3y ⁄= 100)

- Если выражение оказывается ложным (т.е. оператор not возвращает True), значит данная пара (x,y)  нарушает тождественность. В этом случае мы устанавливаем flag = False и прерываем внутренний цикл по y  , так как проверка для остальных y  уже не нужна.

- После прерывания внутреннего цикла, если flag равен False, мы прерываем цикл по x  , так как текущее A  не подходит.

3. Если после проверки всех x  и y  флаг flag остался равен True, это значит, что выражение истинно для всех пар (x,y)  при текущем A  . Мы выводим это A  как наименьшее и завершаем перебор с помощью оператора break.

Таким образом, программа гарантированно находит наименьшее целое A  , при котором формула тождественно истинна для всех неотрицательных x  и y  .

# Перебираем все возможные значения A от 0 до 999
for A in range(1000):
    # Предполагаем, что текущее A подходит
    flag = True
    # Перебираем все возможные значения x от 0 до 999
    for x in range(1000):
        # Перебираем все возможные значения y от 0 до 999
        for y in range(1000):
            # Проверяем выражение: если оно ложно для текущих x и y
            if not((x < A) or (y < A) or ((x * y) % 4 == 0) or (2 * x + 3 * y != 100)):
                # Устанавливаем флаг в False, так как найден случай, где выражение ложно
                flag = False
                # Прерываем цикл по y, проверка остальных значений y не нужна
                break
        # Если флаг False, прерываем цикл по x, текущее A не подходит
        if not(flag):
            break
    # Если выражение истинно для всех x и y, выводим текущее A и завершаем перебор
    if flag:
        print(A)
        break

Ответ: 19

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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