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

15.06 Смешанное

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

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

Задача 1#57877

Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m»; и пусть на числовой прямой дан отрезок B = [36;51]  . Найдите наименьшую возможную длину отрезка A, при котором формула

(x ∈ A )∨ ((x ∈ B) − → ¬ ДЕЛ(x,5))

тождественно истинна (т.е. принимает значение 1) при любом натуральном значении переменной х?

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

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

Мы используем перебор для нахождения наименьшего отрезка A  , при котором формула будет истинна для всех натуральных x  . Основная идея решения заключается в том, чтобы перебрать все возможные отрезки A  , проверить для каждого из них выражение для всех x  от 1 до некоторого достаточно большого числа (например, 500) и выбрать отрезок минимальной длины, при котором выражение выполняется для всех значений x  .

1. Сначала мы задаём отрезок B  в виде списка всех натуральных чисел от 36 до 51 включительно:

- Используем генератор списка [i for i in range(36, 52)], где 52 – это верхняя граница диапазона +1, так как range исключает верхний предел.

2. Создаём переменную mn, которая будет хранить минимальную длину подходящего отрезка A  , и инициализируем её очень большим числом (1010  ), чтобы любое найденное значение было меньше: - mn = 10**10

3. Запускаем двойной цикл для перебора всех возможных отрезков A  :

1. Внешний цикл пробегает левый конец отрезка a1 от 1 до 249 включительно.

2. Внутренний цикл пробегает правый конец отрезка a2 от a1+1 до 250 включительно, чтобы гарантировать, что    A  не пуст.

3. Для каждой пары (a1, a2) создаём список a – все целые числа от a1 до a2-1 включительно:

- a = [i for i in range(a1, a2)]

4. Для текущего отрезка A  проверяем выполнение формулы для всех x  от 1 до 499:

- Инициализируем флаг f = 0, который сигнализирует о нарушении тождественной истины.

- Для каждого x  проверяем логическое выражение:

(x ∈ A) или ((x ∈ B ) ≤ (x%5 ⁄= 0))

Здесь мы используем Python-подстановку, где <= между булевыми значениями работает как импликация: p → q ≡ (not p) or q  .

- Если выражение ложно для хотя бы одного x  , устанавливаем f = 1 и прерываем цикл по x  .

5. Если флаг f остался равным 0, значит для всех x  формула выполняется:

- Вычисляем длину отрезка A  как len(a)-1, так как длина отрезка = количество промежутков между целыми числами.

- Обновляем минимальное значение mn через mn = min(len(a)-1, mn).

6. После проверки всех возможных отрезков выводим mn – наименьшую возможную длину отрезка A  , при которой формула тождественно истинна.

# Задаём отрезок B как список чисел от 36 до 51 включительно
b = [i for i in range(36, 52)]

# Инициализируем минимальную длину подходящего A очень большим числом
mn = 10**10

# Перебираем все возможные левые границы отрезка A
for a1 in range(1, 250):
    # Перебираем все возможные правые границы отрезка A
    for a2 in range(a1+1, 251):
        # Флаг для проверки, нарушается ли формула для хотя бы одного x
        f = 0
        # Формируем список всех чисел от a1 до a2-1
        a = [i for i in range(a1, a2)]
        # Проверяем формулу для всех x от 1 до 499
        for x in range(1, 500):
            # Вычисляем значение логической формулы
            if ((x in a) or ((x in b) <= (x % 5 != 0))) == False:
                # Если формула ложна, устанавливаем флаг и прерываем цикл по x
                f = 1
                break
        # Если формула верна для всех x
        if f == 0:
            # Вычисляем длину отрезка A как количество промежутков между целыми числами
            mn = min(len(a)-1, mn)

# Выводим наименьшую длину отрезка A
print(mn)

Ответ: 10

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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