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

15.03 Неравенства

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

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

Задача 1#5784Максимум баллов за задание: 1

Для какого наибольшего целого неотрицательного числа A  выражение

(69 ⁄= y + 2x ) ∨ (A < x) ∨ (A < y)

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

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

Решение руками:

Инвертируем известную часть:

69 = y + 2x

Пусть y =  1,x = 34  . Чтобы выполнялось условие A  < y  , нужно взять A = 0  , в таком случае условие будет выполняться и для Y  , и для X  .

Если мы возьмём пару y = 3,x = 33  , то теперь наибольшее значение A  уже будет равно 2.

Соответственно, чем больше мы будем брать Y  , тем большее значение A  можно взять.

Но, когда значение Y  станет больше, чем X  , то тогда уже придётся ориентироваться в первую очередь на условие для X  .

Следовательно, чтобы найти наибольшее А, нам нужна такая пара Y,X  , при которой будет выполняться Y  = X  .

Это будет пара Y =  23,X  = 23  , и при таких значениях переменных наибольшее A  будет равно 22.

Идея решения:

Идея заключается в переборе возможных значений A  (от 0  до 1000  ) и проверке, что для всех комбинаций x  и y  (от 1  до 1000  ) выражение

(69 ⁄= y + 2x ) ∨ (A < x) ∨ (A < y)

выполняется. Если найдётся хотя бы одна пара (x, y)  , для которой условие не выполняется (т.е. логическое выражение окажется ложным), это A  отбрасывается. Наибольшее A  , при котором условие выполняется для всех x  и y  , и будет ответом.

Для реализации этой идеи создадим цикл for для перебора параметра A  . Внутри него, также с помощью циклов for, организуем перебор значений x  и y  . Для каждого A  будем создавать переменную-флаг, которая изначально равна 0  . Если условие в цикле if выполняется хотя бы раз, это значит, что исходное выражение оказалось ложным для некоторой пары (x,y)  , и A  не подходит. Если флаг остался равен 0  , значит, условие в if не выполнилось ни разу и A  подходит. Так как мы ищем наибольшее A  , нужно запомнить последнее подходящее значение.

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

for a in range(0, 1000): # перебираем возможные A
    c = 0  # флаг: 0 - условие в цикле ни разу не выполнилось,
           # 1 - условие в цикле хоть раз выполнилось
    for x in range(1, 1000): # Перебор x
        for y in range(1, 1000): # Перебор y
            # проверяем выполнение условия, если выполняется — меняем флаг
            if ((y + 2*x != 69) or (a < x) or (a < y)) == False:
                c = 1 # условие выполнилось (нашли "плохую" пару)
                break # выходим из цикла y
        if c == 1: # условие уже выполнилось
            break  # выходим из цикла x
    if c == 0: # условие не выполнилось ни разу, текущее A подходит
        print(a)  # выводим текущее A

Ответ: 22

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

Задача 2#6482Максимум баллов за задание: 1

Каково наибольшее целое X,  при котором истинно высказывание:
(50 < X ⋅ X ) → (50 > (X +  1) ⋅ (X + 1))?
 

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

Решение руками

Заметим, что логическое следование ложно только в случае 1 →  0  . Значит, нужно понять, при каких x впервые наступит такое условие (и взять x меньше, но максимальный).

Такое условие получается при x = 8: (50 < 64) → (50 >  81)  .

Возьмем x = 7: (50 < 49) →  (50 > 64)  . Получили следование из 0 в 0, что дает истину. Значит, наибольший x = 7.

Идея решения:

Идея заключается в переборе целых значений X  и проверке, для какого наибольшего X  выполняется импликация

        2                  2
(50 < X  ) →  (50 > (X + 1 )).

Импликация A  →  B  ложна только когда A  истинно, а B  ложно. Для всех остальных случаев она истинна. Следовательно, для каждого X  проверяем, что либо X2  ≤ 50  , либо (X + 1)2 < 50  . Нужно найти наибольшее целое X  , для которого условие истинно.

Для реализации создаём цикл по x  от 0  до 1000  . Для каждого x  проверяем выполнение импликации и выводим x  , если условие истинно. Поскольку перебор идёт по возрастанию, наибольшее X  будет последним выведенным значением.

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

for x in range(1000):  # перебираем X от 0 до 999
    if (50 < x * x) <= (50 > (x + 1) * (x + 1)):  # проверяем условие, если оно выполняется, выводим X
        print(x)  # выводим X, для которого условие истинно

Ответ: 7

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

Задача 3#6484Максимум баллов за задание: 1

Для какого наибольшего целого неотрицательного числа A  выражение
(99 ⁄= y + 2x) ∨ (A < x) ∨ (A < y)
тождественно истинно (т.е. принимает значение 1 при любом неотрицательном целом значении переменных x  и y)?

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

Решение руками:

Инвертируем известную часть:

99 = y + 2x

Пусть y =  1,x = 49  . Чтобы выполнялось условие A  < y  , нужно взять A = 0  , в таком случае условие будет выполняться и для Y  , и для X  .

Если мы возьмём пару y = 3,x = 48  , то теперь наибольшее значение A  уже будет равно 2.

Соответственно, чем больше мы будем брать Y  , тем большее значение A  можно взять.

Но, когда значение Y  станет больше, чем X  , то тогда уже придётся ориентироваться в первую очередь на условие для X  .

Следовательно, чтобы найти наибольшее А, нам нужна такая пара Y,X  , при которой будет выполняться Y  = X  .

Это будет пара Y =  33,X  = 33  , и при таких значениях переменных наибольшее A  будет равно 32.

Идея решения:

Идея заключается в переборе возможных значений A  (от 0  до 999  ) и проверке, что для всех комбинаций x  и y  (от 0  до 999  ) выполняется выражение

(99 ⁄= y + 2x) ∨ (A < x ) ∨ (A < y ).

Если найдётся хотя бы одна пара (x, y)  , для которой выражение ложно, текущее A  отбрасывается. Наибольшее A  , для которого условие выполняется для всех x  и y  , и будет ответом.

Для реализации создаётся функция f(a), которая возвращает True, если для данного a  выражение выполняется для всех x  и y  , и False иначе. Затем с помощью цикла перебираем a  от 0  до 999  и выводим все подходящие значения A  . Наибольшее подходящее A  будет последним выведенным.

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

def f(a):  # функция проверяет, выполняется ли выражение для всех x и y при данном a
    for x in range(1000):  # перебор x от 0 до 999
        for y in range(1000):  # перебор y от 0 до 999
         # проверяем выражение: False если условие не выполнено
            if not((99 != y + 2 * x) or (a < x) or (a < y)):
             # если нашли "плохую" пару, возвращаем False
                return False
    return True  # условие выполнено для всех пар, возвращаем True

for a in range(1000):  # перебираем возможные значения A
    if f(a):  # проверяем, подходит ли текущее A
        print(a)  # выводим A, для которого условие истинно

Ответ: 32

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

Задача 4#16307Максимум баллов за задание: 1

Для какого наименьшего целого неотрицательного числа A  выражение

(69 < y +2x) ∨(A > x)∨ (A > y)

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

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

Решение руками

Инвертируем известную часть:

69 ≥ y+ 2x

Пусть y = 1,x = 34  . Чтобы выполнялось условие A > y  , нужно взять A = 2  , в таком случае условие будет выполняться и для Y  , правда не будет выполняться для X  .

Если мы возьмём пару y = 3,x = 33  , то теперь наименьшее значение A  уже будет равно 4.

Соответственно, чем больше мы будем брать Y  , тем больше будет наименьшее значение для A  .

Но, когда значение Y  станет больше, чем X  , то тогда уже придётся ориентироваться в первую очередь на условие для X  , т.к. X  будет меньше чем Y  , и нам хватит меньшего значения для A  , чтобы всё выражение было истиной.

Следовательно, чтобы найти наименьшее А, нам нужна такая пара Y,X  , при которой будет выполняться Y = X  .

Это будет пара Y = 23,X = 23  , и при таких значениях переменных наименьшее A  будет равно 24.

Идея решения:

Идея заключается в переборе возможных значений A  (от 0  до 999  ) и проверке, что для всех комбинаций x  и     y  (от 1  до 999  ) выполняется выражение

(69 < y+ 2x)∨ (A > x)∨ (A > y).

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

Для реализации создаётся функция f(a), которая возвращает True, если выражение выполняется для всех x  и    y  , и False иначе. Затем перебираем A  от 0  до 999  и выводим первое подходящее значение.

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

# функция проверяет, выполняется ли выражение для всех x и y при данном a
def f(a):
    # перебор x от 1 до 999
    for x in range(1, 1000):
        # перебор y от 1 до 999
        for y in range(1, 1000):
            # проверяем выражение: False если условие не выполнено
            if ((69 < y + 2 * x) or (a > x) or (a > y)) == False:
                # если нашли "плохую" пару, возвращаем False
                return False
    # условие выполнено для всех пар, возвращаем True
    return True

# перебираем возможные значения A от 0 до 999
for a in range(1000):
    # проверяем, подходит ли текущее A
    if f(a):
        # выводим наименьшее A, для которого условие истинно
        print(a)
        break

Ответ: 24

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

Задача 5#16308Максимум баллов за задание: 1

Для какого наибольшего целого неотрицательного числа A  выражение

(x + 3y > A )∨ (x < 18)∨ (y < 33)

тождественно истинно при любых целых неотрицательных x  и y?

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

Решение 1 (руками)

Инвертируем известную часть:

(x ≥ 18) ∧(y ≥ 33)

Это выражение истино (а исходное соответственно ложно) при x ≥ 18  и y ≥ 33  одновременно. Неизвестная часть x + 3y > A  говорит, что сумма x и 3y должна быть больше чем A, тогда возьмем максимальные x и y из известной части, так как они же будут являться минимальными значениями при которых неизвестная часть должна давать истину. Подставим x = 18  и y = 33  , получим 18 + 99 = 117 > A  , отсюда A = 116  .

Идея решения:

Идея заключается в переборе возможных значений A  (от 1  до 1000  ) и проверке, что для всех комбинаций x  и      y  (от 1  до 999  ) выполняется выражение

(x + 3y > A) ∨(x < 18)∨(y < 33).

Выражение ложное только если x+ 3y ≤ A  , x ≥ 18  и y ≥ 33  одновременно. Нам нужно найти наибольшее A  , при котором условие выполняется для всех x  и y  .

Для реализации создаём функцию f(a), которая возвращает True, если выражение выполняется для всех x  и   y  , и False иначе. Затем перебираем A  от 1000  до 1  в порядке убывания и выводим первое подходящее значение. Так как перебор идёт сверху вниз, найденное значение будет наибольшим.

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

# функция проверяет, выполняется ли выражение для всех x и y при данном a
def f(a):
    # перебор x от 1 до 999
    for x in range(1, 1000):
        # перебор y от 1 до 999
        for y in range(1, 1000):
            # проверяем выражение: False если условие не выполнено
            if not ((x + 3 * y > a) or (x < 18) or (y < 33)):
                # если нашли "плохую" пару, возвращаем False
                return False
    # условие выполнено для всех пар, возвращаем True
    return True

# перебираем возможные значения A от 1000 до 1
for a in range(1000, 0, -1):
    # проверяем, подходит ли текущее A
    if f(a):
        # выводим наибольшее A, для которого условие истинно
        print(a)
        break

Ответ: 116

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

Задача 6#16309Максимум баллов за задание: 1

Для какого наибольшего целого неотрицательного числа A  выражение

              --------
(3x+ 9y ≥ A)∨ (x > 20) ∨(y < 10)

тождественно истинно при любых целых неотрицательных x  и y?

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

Решение руками

Инвертируем известную часть:

(x > 20) ∨(y ≥ 10)

Это выражение истино (а исходное соответственно ложно) при x > 20  и y ≥ 10  одновременно. Неизвестная часть 3x + 9y ≥ A  говорит, что сумма 3x и 9y должна быть больше или равна чем A, тогда возьмем максимальные x и y из известной части, так как они же будут являться минимальными значениями при которых неизвестная часть должна давать истину. Подставим x = 21  и y = 10  , получим 63 + 90 = 153 ≥ A  , отсюда A = 153  .

Идея решения:

Идея заключается в переборе возможных значений A  (от 0  до 1000  ) и проверке, что для всех комбинаций x  и      y  (от 1  до 999  ) выполняется выражение

              --------
(3x+ 9y ≥ A)∨ (x > 20)∨ (y < 10),

где --------
(x > 20)  означает отрицание условия x > 20  . Выражение ложное только если 3x+ 9y < A  , x > 20  , и y ≥ 10  одновременно. Нам нужно найти наибольшее A  , для которого выражение истинно для всех x  и y  .

Для реализации создаётся функция f(a), которая возвращает True, если выражение выполняется для всех x  и    y  , и False иначе. Затем перебираем A  от 1000  до 1  в порядке убывания и выводим первое подходящее значение. Так как перебор идёт сверху вниз, найденное значение будет наибольшим.

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

# функция проверяет, выполняется ли выражение для всех x и y при данном a
def f(a):
    # перебор x от 1 до 999
    for x in range(1, 1000):
        # перебор y от 1 до 999
        for y in range(1, 1000):
            # проверяем выражение: False если условие не выполнено
            if not ((3 * x + 9 * y >= a) or not (x > 20) or (y < 10)):
                # если нашли "плохую" пару, возвращаем False
                return False
    # условие выполнено для всех пар, возвращаем True
    return True

# перебираем возможные значения A от 1000 до 1
for a in range(1000, 0, -1):
    # проверяем, подходит ли текущее A
    if f(a):
        # выводим наибольшее A, для которого условие истинно
        print(a)
        break

Ответ: 153

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

Задача 7#16310Максимум баллов за задание: 1

Для какого наибольшего целого неотрицательного числа A  выражение

(    13     )   -------
  x+ --y ≥ A  ∨ (x ≥ y)∨ (y < 7)
      9

тождественно истинно при любых целых неотрицательных x  и y?

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

Решение 1

Упростим, а затем инвертируем известную часть:

(x ≥ y) ∧(y ≥ 7)

Поскольку по условию A  должно быть меньше либо равно (x + 13y)
    9  , нам надо взять наименьшие возможные значения для X  и Y  , чтобы при больших значениях условие для A  точно выполнялось. Следовательно, нужно брать Y = 7,X = 7  , то есть     91
7 + (- ) ≥ A
     9  , или же 17,(1)  ≥ A  , наибольшим значением для A  будет 17.

Идея решения:

Для нахождения наибольшего целого A  , при котором выражение

(           )
     13         -------
  x+  9 y ≥ A ∨ (x ≥ y)∨ (y < 7)

тождественно истинно, используем программный перебор. Идея состоит в том, чтобы для каждого возможного   A  проверять все пары (x,y)  в заданном диапазоне (от 1 до 999). Если найдётся хотя бы одна пара, при которой выражение ложно, текущее A  не подходит. Последнее A  , для которого условие выполнено для всех (x,y)  , и будет наибольшим.

Для реализации создаём функцию f(a), которая возвращает True, если выражение выполняется для всех пар  (x,y)  , и False иначе. Далее перебираем A  в порядке возрастания и выводим подходящее значение, последнее выведенное А и будет ответом.

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

# функция проверяет выполнение выражения для всех x и y при данном a
def f(a):
    # перебор x от 1 до 999
    for x in range(1, 1000):
        # перебор y от 1 до 999
        for y in range(1, 1000):
            # проверяем условие: False, если выражение ложно
            if ((x + 13/9 * y >= a) or not(x >= y) or (y < 7)) == False:
                # если найден "плохой" набор (выражение ложно), возвращаем False
                return False
    # если ни одна пара не нарушила условие, возвращаем True
    return True

# перебор A от 0 до 99
for a in range(100):
    # проверяем, подходит ли текущее A
    if f(a):
        # выводим наибольшее целое A, для которого выражение тождественно истинно
        print(a)

Ответ: 17

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

Задача 8#18039Максимум баллов за задание: 1

Для какого наименьшего целого неотрицательного числа A  выражение

(x < A )∨(x < 20)∨ (x > 30)

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

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

Решение руками:

Инвертируем известную часть:

(x ≥ 20) ∧(x ≤ 30)

Нам нужно взять наибольшее возможное значение для X  , чтобы при меньших значениях условие x < A  точно выполнялось. Следовательно, при X = 30  , наименьшее A = 30  .

Идея решения:

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

(x < A)∨ (x < 20) ∨(x > 30).

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

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

# перебор возможных значений A от 0 до 999
for a in range(1000):
    # флаг: 0 - условие не нарушено ни разу, 1 - условие нарушено хотя бы раз
    fl = 0
    # перебор x от 0 до 999
    for x in range(1000):
        # вычисляем выражение для текущего x
        f = (x < a) or (x < 20) or (x > 30)
        # если выражение ложно
        if f == 0:
            # отмечаем нарушение
            fl = 1
            # выходим из цикла по x
            break
    # если условие не нарушено ни разу, текущее A подходит
    if not fl:
        # выводим наименьшее A
        print(a)
        # прерываем цикл, так как найден наименьший A
        break

Ответ: 31

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

Задача 9#18040Максимум баллов за задание: 1

Для какого наименьшего целого неотрицательного числа A  выражение

(x2 − 3x+ 2 > 0)∨ (y > x2 + 7)∨ (xy < A )

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

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

Решение руками:

Инвертируем известную часть:

(x2 − 3x+ 2 ≤ 0)∧(y ≤ x2 + 7)

Корни для первого неравенства - 1 и 2, а значит можно превратить его в (x ≥ 1) ∧(x ≤ 2)  .

В данном диапазоне единственные целые значения x  - это 1 и 2.

При x = 1  , y ≤ 8  .

При x = 2  , y ≤ 11  .

Чтобы условие для A  точно выполнялось, нужно взять значения x,y  как можно больше, чтобы при меньших значения переменных выражение точно было истиной. Следовательно, x = 2,y = 11  , и при данных значениях наименьшее A = 23  .

Идея решения:

Для нахождения наименьшего целого A  , при котором выражение

  2                   2
(x − 3x+ 2 > 0)∨ (y > x + 7)∨ (xy < A )

тождественно истинно, используем программный перебор. Идея заключается в том, чтобы проверить все пары (x,y)  в диапазоне от 0  до 299  для каждого значения A  от 0  до 999  . Если для какой-то пары выражение ложно, текущее A  не подходит. Первое A  , для которого выражение истинно для всех (x,y)  , будет наименьшим. Если для текущего A  при любой паре (x,y)  выражение оказалось True, то данное A  нам подходит.

Для реализации создаём функцию f(x, y, a), которая возвращает True, если выражение выполняется для конкретной пары (x,y)  , и False иначе. Затем во внешнем цикле перебираем A  и проверяем условие для всех (x,y)  .

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

# функция проверяет выполнение выражения для конкретной пары x и y при данном a
def f(x, y, a):
    return (x ** 2 - 3 * x + 2 > 0) or (y > x ** 2 + 7) or (x * y < a)

# перебор возможных значений A от 0 до 999
for a in range(1000):
    fl = 0  # флаг: 0 - условие не нарушено, 1 - условие нарушено хотя бы раз
    # перебор x от 0 до 299
    for x in range(300):
        # перебор y от 0 до 299
        for y in range(300):
            # проверяем выражение для текущих x, y
            if not f(x, y, a):
                fl = 1  # условие хотя бы раз не выполнилось
                break  # выходим из цикла по y
        if fl:  # если условие нарушено
            break  # выходим из цикла по x
    # если условие не нарушено ни разу, текущее A подходит
    if not fl:
        print(a)  # выводим наименьшее A
        break  # завершение перебора, так как найден наименьший A

Ответ: 23

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

Задача 10#20048Максимум баллов за задание: 1

Для какого наименьшего целого неотрицательного числа A  выражение

(y + 2x < A )∨ (x > 30)∨ (y > 20)

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

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

Решение 1. Руками

Инвертируем известную часть:

(x ≤ 30) ∧(y ≤ 20)

Чтобы условие (y + 2x < A )  выполнялось всегда, надо взять для x  и y  наибольшие возможные значения, чтобы при меньших значениях условие точно выполнялось.

То есть, x = 30  , а y = 20  , тогда наименьшее возможное A = 81  .

Идея решения:

Идея заключается в переборе возможных значений A  от 0  до 999  с помощью цикла for. Для каждого A  проверяем все возможные значения x  и y  от 0  до 999  через вложенные циклы for. Для каждой тройки (A,x,y)  вычисляем логическое выражение

(y +2x < A) ∨(x > 30)∨(y > 20).

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

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

# функция проверяет выполнение выражения для конкретного A
def f(a):
    # перебор x от 0 до 999
    for x in range(1000):
        # перебор y от 0 до 999
        for y in range(1000):
            # проверяем выражение для текущих x и y
            if not((y + 2 * x < a) or (x > 30) or (y > 20)):
                # если выражение ложно, возвращаем False
                return False
    # если ни одна пара не нарушила условие, возвращаем True
    return True

# перебор возможных значений A от 0 до 999
for a in range(1000):
    # проверяем, подходит ли текущее A
    if f(a):
        # выводим наименьшее A
        print(a)
        # прерываем цикл, так как найден наименьший A
        break

Ответ: 81

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

Задача 11#21466Максимум баллов за задание: 1

Сколько существует целых неотрицательных чисел A  , при которых выражение

((y ⋅y < A ) → (y ≤ 8))∧ ((x ≤ 5) → (x⋅x ≤ A))

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

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

Решение руками:

Упростим выражение:

((y2 ≥ A) ∨(y ≤ 8))∧ ((x > 5)∨ (x2 ≥ A ))

Инвертируем известную часть для левой и правой части:

(y > 8)

(x ≤ 5)

Нам нужно, чтобы выполнялась и левая часть выражения, и правая.

Разберём сначала левую часть:

Чтобы ((y2 ≥ A )  выполнялось, нужно взять наименьшее возможное значение для y  , чтобы при больших y  выражение точно было истиной.

То есть, при y = 9  для левой части A = 81,80,79  ... и так до A = 0  .

Теперь разберём правую часть:

Чтобы (x2 ≥ A))  выполнялось, нужно взять наибольшее возможное значение для x  , чтобы при меньших x  выражение точно было истиной.

То есть, при x = 5  для правой части A = 25,26,27  ... и так до бесконечности.

Общие значения для обоих частей лежат в отрезке [25;81]  . Cледовательно, подходящих значений A  будет 81 − 25 + 1 = 57  .

Идея решения:

Для нахождения количества целых неотрицательных A  , при которых выражение

((y ⋅y < A ) → (y ≤ 8))∧ ((x ≤ 5) → (x⋅x ≤ A))

тождественно истинно, используем программный перебор. Идея заключается в том, чтобы проверить все значения     A  от 0  до 299  с помощью цикла for. Для каждого A  проверяем все значения x  и y  от 0  до 299  через вложенные циклы for. Для каждой тройки (A, x,y)  вычисляем логическое выражение. Если хотя бы для одной пары (x,y)  выражение оказалось ложным, текущее A  отбрасываем. Если выражение истинно для всех (x,y)  , увеличиваем счётчик подходящих A  . После перебора всех A  счётчик покажет количество целых неотрицательных A  , для которых выражение тождественно истинно.

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

# функция проверяет выполнение выражения для конкретного x, y и A
def f(x, y, a):
    return ((y * y < a) <= (y <= 8)) and ((x <= 5) <= (x * x <= a))

# счётчик подходящих A
counter = 0

# перебор возможных значений A от 0 до 299
for a in range(300):
    # флаг: 0 - условие не нарушено ни разу,
    1 - условие нарушено хотя бы раз
    fl = 0
    # перебор x от 0 до 299
    for x in range(300):
        # перебор y от 0 до 299
        for y in range(300):
            # если выражение ложно
            if not f(x, y, a):
                fl = 1  # меняем значение флага
                break   # выходим из цикла y
        if fl:       # если флаг равен 1
            break   # выходим из цикла x
    # если условие не нарушено ни разу, увеличиваем счётчик
    if not fl:
        counter += 1

# выводим количество подходящих A
print(counter)

 

Ответ: 57

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

Задача 12#22206Максимум баллов за задание: 1

Для какого наибольшего целого неотрицательного числа A  выражение

(x + 3y > A )∨(x < 18)∨(y < 33)

тождественно истинно при любых целых неотрицательных x  и y?

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

Решение 1. Руками

Инвертируем известную часть:

(x ≥ 18) ∧(y ≥ 33)

Чтобы условие (x + 3y > A )  выполнялось всегда, надо взять для x  и y  наименьшие возможные значения, чтобы при больших значениях A  точно было меньше, чем x + 3y  .

То есть, x = 18  , а y = 33  , 117 > A  , тогда наименьшее возможное A = 116  .

Идея решения:

Для нахождения наибольшего целого A  , при котором выражение

(x + 3y > A )∨ (x < 18)∨ (y < 33)

тождественно истинно для всех неотрицательных целых x  и y  , используем программный перебор. Идея заключается в том, чтобы проверить все значения A  от 1  до 499  с помощью цикла for. Для каждого A  перебираем все значения       x  и y  от 1  до 499  через вложенные циклы for. Для каждой тройки (A,x,y)  вычисляем логическое выражение. Если хотя бы для одной пары (x,y)  выражение оказалось ложным, текущее A  отбрасываем. Если выражение истинно для всех (x,y)  , обновляем максимальное найденное значение A  . В конце цикла максимальное значение будет наибольшим подходящим A  .

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

# функция проверяет выполнение выражения для конкретного x, y и A
def f(x, y, A):
    return (x + 3*y > A) or (x < 18) or (y < 33)

# переменная для хранения наибольшего подходящего A
ans = 0

# перебор возможных значений A от 1 до 499
for a in range(1, 500):
    # флаг: True - выражение выполняется для всех x и y, False - хотя бы один случай нарушает
    for x in range(1, 500):
        for y in range(1, 500):
            flag = True
            # если выражение ложно для текущих x и y
            if not f(x, y, a):
                flag = False
                break
        if not flag:
            break
    # если выражение выполняется для всех x и y, обновляем максимум
    if flag:
        ans = max(a, ans)

# выводим наибольшее подходящее A
print(ans)

Ответ: 116

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

Задача 13#22207Максимум баллов за задание: 1

Для какого наименьшего целого неотрицательного числа A  выражение

(2x + 5y ≤ A) ∨(x ≥ y)∨ (y > 11)

тождественно истинно при любых целых неотрицательных x  и y?

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

Решение 1. Руками

Инвертируем известную часть:

(x < y)∧ (y ≤ 11)

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

Следовательно, y = 11  , а x = 10  (т.к. x < y  должно выполняться).

(2× 10+ 5 × 11 ≤ A )  , или же (75 ≤ A)  , наименьшее значение A − 75  .

Идея решения:

Для нахождения наименьшего целого A  , при котором выражение

(2x + 5y ≤ A )∨ (x ≥ y)∨ (y > 11)

тождественно истинно для всех неотрицательных целых x  и y  , используем программный перебор. Идея заключается в том, чтобы проверить все значения A  от 0  до 499  с помощью цикла for. Для каждого A  перебираем все значения       x  и y  от 0  до 99  через вложенные циклы for. Для каждой тройки (A,x,y)  вычисляем логическое выражение. Если хотя бы для одной пары (x,y)  выражение оказалось ложным, текущее A  отбрасываем и переходим к следующему значению. Если выражение истинно для всех (x,y)  , значит текущее A  подходит, и так как мы ищем наименьшее A  , выводим его и прерываем цикл.

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

# функция проверяет выполнение выражения для конкретного x, y и A
def f(x, y, A):
    return (2 * x + 5 * y <= A) or (x >= y) or (y > 11)

# перебор возможных значений A от 0 до 499
for a in range(500):
    # флаг: True - выражение выполняется для всех x и y,
    False - хотя бы один случай не выполняется
    for x in range(100):
        for y in range(100):
            flag = True
            # если выражение ложно для текущих x и y
            if not f(x, y, a):
                flag = False # меняем значение флага
                break # сбрасываем цикл y
        if not flag:
            break # сбрасываем цикл x
    # если выражение выполняется для всех x и y, текущее A подходит
    if flag:
        # выводим наименьшее подходящее A
        print(a)
        break

Ответ: 75

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

Задача 14#22650Максимум баллов за задание: 1

Для какого наименьшего целого неотрицательного числа A  выражение

(y+ 2x < A)∨ (30 < x)∨ (20 < y)

тождественно истинно при любых целых неотрицательных x  и y?

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

Решение 1. Руками

Инвертируем известную часть:

(30 ≥ x) ∧(20 ≥ x)

Чтобы условие (y + 2x < A )  выполнялось всегда, надо взять для x  и y  наибольшие возможные значения, чтобы при меньших значениях условие точно выполнялось.

То есть, x = 30  , а y = 20  , тогда наименьшее возможное A = 81  .

Идея решения:

Для нахождения наименьшего целого A  , при котором выражение

(y + 2x < A )∨ (30 < x)∨ (20 < y)

тождественно истинно для всех неотрицательных целых x  и y  , используем программный перебор. Идея заключается в том, чтобы проверить все значения A  от 0  до 99  с помощью цикла for. Для каждого A  перебираем все значения      x  и y  от 0  до 99  через вложенные циклы for. Для каждой тройки (A,x,y)  вычисляем логическое выражение. Если хотя бы для одной пары (x,y)  выражение оказалось ложным, текущее A  отбрасываем. Если выражение истинно для всех (x,y)  , проверяем, является ли текущее A  минимальным, и обновляем его значение. В конце цикла минимальное значение A  будет наименьшим подходящим.

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

# функция проверяет выполнение выражения для конкретного x, y и A
def f(x, y, A):
    return (y + 2*x < A) or (30 < x) or (20 < y)

# переменная для хранения наименьшего подходящего A
ans = 10000000

# перебор возможных значений A от 0 до 99
for a in range(100):
    # флаг:
    # True - выражение выполняется для всех x и y
    # False - хотя бы один случай не выполняет выражение
    # перебор x от 0 до 99
    for x in range(100):
        # перебор y от 0 до 99
        for y in range(100):
            # предполагаем, что выражение выполняется
            flag = True
            # если выражение не выполняется для текущих x и y
            if not f(x, y, a):
                # меняем флаг, так как условие не выполняется
                flag = False
                # выходим из цикла y, так как нашли "плохую" пару
                break
        # выходим из цикла x, так как условие уже не выполняется
        if not flag:
            break
    # если выражение выполняется для всех x и y, обновляем минимальный A
    if flag:
        ans = min(a, ans)

# выводим наименьшее подходящее A
print(ans)

Ответ: 81

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

Задача 15#22651Максимум баллов за задание: 1

Для какого наибольшего целого неотрицательного числа A  выражение

((x ≤ 9) → (x⋅x ≤ A))∧ ((y ⋅y ≤ A ) → (y ≤ 10))

тождественно истинно при любых целых неотрицательных x  и y?

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

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

Упростим выражение и раскроем импликации:

((x > 9)∨ (x2 ≤ A))∧ ((y2 > A)∨ (y ≤ 10))

Обе части выражения должны давать истину, поэтому инвентируем известные части обеих частей выражения и рассмотрим их отдельно:

(x ≤ 9)

(y > 10)

Сначала рассмотрим левую часть:

Чтобы A  точно было больше, чем x2  , надо взять наибольшее возможное значение для x  , чтобы при меньших    x  выражение точно было истинным.

При x = 9  , 81 <= A  , значит A = 81,82,83  ... и так далее до бесконечности.

Теперь рассмотрим правую часть:

Чтобы A  точно было меньше, чем y2  , надо взять наименьшее значение для y  , чтобы при больших y  выражение точно было истинным.

При y = 11  , 121 > A  , A = 120  - максимальное возможное A  для правой части

Наибольшее общее значение для обеих частей выражения – это A = 120  .

 

Идея решения:

Для нахождения наибольшего целого A  , при котором выражение

((x ≤ 9) → (x⋅x ≤ A))∧ ((y ⋅y ≤ A ) → (y ≤ 10))

тождественно истинно для всех неотрицательных целых x  и y  , используем программный перебор. Идея заключается в том, чтобы проверить все значения A  от 0  до 999  с помощью цикла for. Для каждого A  перебираем все значения       x  и y  от 1  до 999  через вложенные циклы for. Для каждой тройки (A,x,y)  проверяем логические импликации. Если хотя бы для одной пары (x,y)  выражение оказалось ложным, текущее A  отбрасываем. Если выражение истинно для всех (x,y)  , текущее A  обновляем как потенциально наибольшее. В конце цикла наибольшее подходящее A  и будет ответом.

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

# функция проверяет выполнение выражения для конкретного x, y и A
def f(a):
    for x in range(1, 1000):
        for y in range(1, 1000):
            # проверяем, выполняется ли логическая импликация
            if (((x <= 9) <= (x * x <= a)) and
                ((y * y <= a) <= (y <= 10))) == False:
                # если условие не выполняется, возвращаем False
                return False
    # если условие выполняется для всех x и y, возвращаем True
    return True

# перебор возможных значений A от 0 до 999
for a in range(1000):
    # если выражение тождественно истинно для текущего A
    if f(a):
        # выводим найденное наибольшее A
        print(a)

Ответ: 120

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

Задача 16#22652Максимум баллов за задание: 1

Сколько существует целых неотрицательных чисел A  , при которых выражение

((y⋅y < A) → (y ≤ 8))∧((x ≤ 5) → (x⋅x ≤ A ))

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

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

Решение руками:

Упростим выражение:

((y2 ≥ A) ∨(y ≤ 8))∧ ((x > 5)∨ (x2 ≥ A ))

Инвертируем известную часть для левой и правой части:

(y > 8)

(x ≤ 5)

Нам нужно, чтобы выполнялась и левая часть выражения, и правая.

Разберём сначала левую часть:

Чтобы ((y2 ≥ A )  выполнялось, нужно взять наименьшее возможное значение для y  , чтобы при больших y  выражение точно было истиной.

То есть, при y = 9  для левой части A = 81,80,79  ... и так до A = 0  .

Теперь разберём правую часть:

Чтобы (x2 ≥ A))  выполнялось, нужно взять наибольшее возможное значение для x  , чтобы при меньших x  выражение точно было истиной.

То есть, при x = 5  для правой части A = 25,26,27  ... и так до бесконечности.

Общие значения для обоих частей лежат в отрезке [25;81]  . Cледовательно, подходящих значений A  будет 81 − 25 + 1 = 57  .

Идея решения:

Для подсчёта количества целых неотрицательных чисел A  , при которых выражение

((y ⋅y < A ) → (y ≤ 8))∧ ((x ≤ 5) → (x⋅x ≤ A))

тождественно истинно для всех неотрицательных целых x  и y  , используем программный перебор. Идея заключается в том, чтобы проверить все значения A  от 0  до 999  с помощью цикла for. Для каждого A  перебираем все значения       x  и y  от 1  до 999  через вложенные циклы for. Для каждой тройки (A,x,y)  проверяем логические импликации. Если хотя бы для одной пары (x,y)  выражение оказалось ложным, текущее A  отбрасываем. Если выражение истинно для всех (x,y)  , увеличиваем счётчик. В конце цикла счётчик содержит количество подходящих A  .

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

# инициализация счётчика подходящих значений A
count = 0

# перебор возможных значений A от 0 до 999
for a in range(0, 1000):
    # флаг: 0 - выражение не проверялось на ложное значение
    # 1 - хотя бы один случай не выполняет выражение
    c = 0
    # перебор x от 1 до 999
    for x in range(1, 1000):
        # перебор y от 1 до 999
        for y in range(1, 1000):
            # проверяем выполнение логического выражения
            if (((y*y < a) <= (y <= 8)) and ((x <= 5) <= (x*x <= a))) == False:
                # если условие не выполняется, меняем флаг
                c = 1
                # выходим из цикла y, так как нашли "плохую" пару
                break
        # выходим из цикла x, так как условие уже не выполняется
        if c == 1:
            break
    # если выражение выполняется для всех x и y, увеличиваем счётчик
    if c == 0:
        count += 1

# выводим количество подходящих A
print(count)

Ответ: 57

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

Задача 17#23187Максимум баллов за задание: 1

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

(x > 23)∨ (A > x) ∨(A > y)∨ (y > 47)

тождественно истинна при любых положительных x  и y  ?

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

Решение 1. Руками

Инвертируем известную часть:

(x ≤ 23) ∧(y ≤ 47)

Нужно, чтобы выполнялось одно из двух условий для A  : > x  и > y

Чтобы выполнялось A > x  , нужно взять наибольшее возможное значение для x  , чтобы при меньших x  значение       A  точно было больше.

A > 23  , значит нам подходят следующие значения для A  : 24,25,26  ... и так далее до бесконечности.

Чтобы выполнялось A > y  , нужно взять наибольшее возможное значение для y  , чтобы при меньших y  значение       A  точно было больше.

A > 47  , значит нам подходят следующие значения для A  : 48,49,50  ... и так далее до бесконечности.

Наименьшее А, которое удовлетворяет одному из условий – это A = 24  .

Идея решения:

Для нахождения наименьшего целого A  , при котором выражение

(x > 23)∨ (A > x) ∨(A > y)∨ (y > 47)

тождественно истинно для всех положительных целых x  и y  , используем программный перебор. Идея заключается в том, чтобы проверить все значения A  от 0  до 999  с помощью цикла for. Для каждого A  перебираем все значения x  и y  от 1  до 999  через вложенные циклы for. Для каждой тройки (A,x,y)  вычисляем логическое выражение. Если хотя бы для одной пары (x,y)  выражение оказалось ложным, текущее A  отбрасываем. Если выражение истинно для всех (x,y)  , текущее A  подходит как минимальное, и выводим его.

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

# функция проверяет выполнение выражения для конкретного x, y и A
def f(x, y, a):
    return (x > 23) or (a > x) or (a > y) or (y > 47)

# перебор возможных значений A от 0 до 999
for a in range(1000):
    # предполагаем, что текущее A подходит
    podh = True
    # перебор x от 1 до 999
    for x in range(1000):
        # перебор y от 1 до 999
        for y in range(1000):
            # если выражение не выполняется для текущих x и y
            if not(f(x, y, a)):
                # меняем флаг, так как условие не выполняется
                podh = False
                # выходим из цикла y, нашли "плохую" пару
                break
        # выходим из цикла x, так как условие уже не выполняется
        if not(podh):
            break
    # если выражение выполняется для всех x и y, выводим A и прерываем поиск
    if podh:
        print(a)
        break

 

Ответ: 24

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

Задача 18#23502Максимум баллов за задание: 1

Укажите наименьшее целое значение A  , при котором выражение

(5k + 6n > 57)∨ ((k ≤ A )∧(n < A))

истинно для любых целых положительных значений k  и n  .

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

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

Инвертируем известную часть:

5k+ 6n ≤ 57

Чтобы выражение было истинным, для A  должны выполняться сразу оба условия из правой части, поэтому для 5k +6n ≤ 57  стоит подобрать 2 пары: с наибольшим значение k  , и с наибольшим значением n  , и выбрать из двух возможных A  наибольшее, чтобы при меньших значениях k  и n  выражение точно было истиной.

k = 10,n = 1  , поскольку k > n  , рассмотрим k ≤ A  :

10 <= A  , A = 10  .

k = 1,n = 8  , поскольку k < n  , рассмотрим n < A  :

8 < A  , A = 9  .

Т.к. 10 > 9,A = 10

 

Идея решения:

Идея заключается в переборе возможных целых неотрицательных значений параметра A  с помощью цикла for. Для каждого фиксированного A  проверяем все положительные целые пары (k,n)  в некотором достаточном диапазоне (в программе это 1...999  ). Для каждой пары вычисляем логическое выражение

(5k+ 6n > 57)∨ ((k ≤ A)∧ (n < A)).

Если найдётся хотя бы одна пара (k,n)  , для которой выражение ложно, текущее A  не подходит. Первый (то есть наименьший) A  , для которого выражение истинно для всех проверенных (k,n)  , и будет ответом.

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

# перебор возможных значений A от 0 до 999
for a in range(0, 1000):
    # флаг: True - предполагаем, что текущее A подходит
    flag = True
    # перебор k от 1 до 999
    for k in range(1, 1000):
        # перебор n от 1 до 999
        for n in range(1, 1000):
            # если выражение ложно для текущих k и n, помечаем A как неподходящее
            if not ((5 * k + 6 * n > 57) or ((k <= a) and (n < a))):
                flag = False
                # выходим из внутреннего цикла n, так как нашли "плохую" пару
                break
        # если уже найдена "плохая" пара, выходим из цикла k
        if not flag:
            break
    # если ни одной "плохой" пары не нашлось, печатаем текущее (наименьшее) A и прерываем поиск
    if flag:
        print(a)
        break

Ответ: 10

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

Задача 19#25775Максимум баллов за задание: 1

Укажите наибольшее целое значение А, при котором выражение

                  3            2
(y − x ⁄= 5) ∨(A < 2x + y)∨ (A < y + 16)
истинно для любых целых положительных значений x и y.
Показать ответ и решение

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

Инвертируем известную часть:

y − x = 5

Пары, которые будут подходить под такое условие: y = 6,x = 1  ; y = 7,x = 2  ; y = 8,x = 3  и т.д.

Оба условия для A  построены так, что A  должно быть меньше правой части. Следовательно, чтобы A  точно было меньше при любых значениях x  и y  , надо взять наименьшие возможные значения для данных переменных, чтобы при больших значениях условие точно выполнялось.

Пара, подходящая под данное условие - это y = 6,x = 1  .

         3
A < (2∗ 1) +6  , A = 13

A < 62 + 16  , A = 51  .

Наибольшим значением для A  - это 51.

 

Идея решения:

Проверяем программно все неотрицательные кандидаты A  в заданном диапазоне (в коде — 0 до 99). Для каждого фиксированного A  с помощью вложенных циклов for перебираем все положительные целые пары (x,y)  (в коде — от 1  до 999  ). Для каждой пары вычисляем логическое выражение

                   3           2
(y − x ⁄= 5)∨ (A < 2x + y)∨ (A < y + 16).

Если для какой-либо пары выражение ложно, данный A  не подходит. Если же для всех перебранных пар выражение истинно, этот A  считается подходящим. Поскольку требуется найти наибольшее подходящее A  , в конце нужно взять максимум среди всех подходящих A  .

# Функция проверяет, подходит ли конкретное значение A
def f(a):
    # Перебираем x в диапазоне от 1 до 999
    for x in range(1, 1000):
        # Перебираем y в диапазоне от 1 до 999
        for y in range(1, 1000):
            # Проверяем выполнение логического выражения
            # Если выражение ложно хотя бы для одной пары (x, y),
            # то данный A не подходит
            if ((y - x != 5) or (a < 2 * x ** 3 + y)
                or (a < y ** 2 + 16)) == False:
                return False
    # Если не найдено ни одной "плохой" пары, значит A подходит
    return True

# Перебираем A от 0 до 99
for a in range(100):
    # Если A подходит
    if f(a):
        # Выводим его
        print(a)

Ответ: 51

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

Задача 20#26175Максимум баллов за задание: 1

Найдите наименьшее целое значение А, при котором выражение

(5k + 6n > 57)∨ ((k ≤ A )∧(n < A))
истинно для любых целых положительных значений k  и n.  В ответе запишите полученное число, возведенное в квадрат.
Показать ответ и решение

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

Инвертируем известную часть:

5k+ 6n ≤ 57

Чтобы выражение было истинным, для A  должны выполняться сразу оба условия из правой части, поэтому для 5k +6n ≤ 57  стоит подобрать 2 пары: с наибольшим значение k  , и с наибольшим значением n  , и выбрать из двух возможных A  наибольшее, чтобы при меньших значениях k  и n  выражение точно было истиной.

k = 10,n = 1  , поскольку k > n  , рассмотрим k ≤ A  :

10 <= A  , A = 10  .

k = 1,n = 8  , поскольку k < n  , рассмотрим n < A  :

8 < A  , A = 9  .

Т.к. 10 > 9,A = 10  , и нужно возвести 10  в квадрат.

 

Идея решения:

Перебираем значения A  в порядке возрастания, начиная с 0  . Для каждого фиксированного A  перебираем все положительные целые значения k  и n  (в коде — от 1  до 999  ) и проверяем выполнение логического выражения

(5k+ 6n > 57)∨ ((k ≤ A)∧ (n < A)).

Если хотя бы для одной пары (k,n)  условие не выполняется, такой A  исключается. Первый A  , для которого условие истинно при всех проверяемых (k,n)  , является минимальным подходящим. По условию задачи в ответ записываем квадрат найденного A  .

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

# Перебираем возможные значения A
for A in range(100000):
    # Считаем, что A подходит, пока не доказано обратное
    flag = True

    # Перебираем значения k
    for k in range(1, 1000):
        # Перебираем значения n
        for n in range(1, 1000):
            # Проверяем выполнение условия задачи
            f = (5*k + 6*n > 57) or ((k <= A) and (n < A))

            # Если условие не выполняется — A не подходит
            if f == 0:
                flag = False
                break

        # Если A уже не подходит — прерываем внешний цикл k
        if not flag:
            break

    # Если A подошёл — выводим его квадрат и завершаем поиск
    if flag:
        print(A**2)
        break

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