Задача к ЕГЭ по информатике на тему «Смешанное» №5

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

На числовой прямой дан промежуток A  и множество S = {23,27,45,46,47,67} .

Определите максимальную длину промежутка A  , такого что его правая граница не больше 50  и выражение

                                                                ------- ((¬Д ЕЛ(x,3)∧ (y ∕∈ S)) → ((x > 7) → (y > 11)))∨ (x⋅y ≤ 76)∨(x ∕∈ A)∨ (y ∈ A) » class=»math-display» src=»/images/inform/quest/quest-2958-9.svg» width=»auto»></div>
<p class= тождественно истинно, то есть принимает значение 1  при любых натуральных значениях переменных x  , y  .

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

Система для врагов:

( ||| x ||... 3 |||| |||| y ∕∈ S |||| x > 7 |{ | y ≤ 11 |||| |||| x⋅y > 76 |||| x ∈ A |||(   y ∈ A » class=»math-display» src=»/images/inform/reshen/reshen-2958-1.svg» width=»auto»></div>
<p class= Враги мечтают, чтобы x > 7  » class=»math» src=»/images/inform/reshen/reshen-2958-2.svg» width=»auto»>, <img decoding= и x ⋅y > 76  » class=»math» src=»/images/inform/reshen/reshen-2958-4.svg» width=»auto»>. Тогда при <img decoding= единственные y  , которые смогут взять враги, чтобы условие x⋅y > 76  » class=»math» src=»/images/inform/reshen/reshen-2958-7.svg» width=»auto»> выполнялось, будут равны <img decoding= и 11  . Заметит, что при увеличении x  враги смогут брать больше вариантов y  , но всегда максимальное значение ymax = 11  . Все натуральные y <= ymax  не принадлежат S  , значит условие y ∕∈ S  автоматически выполнено. Мечты врагов такие: «Вот бы y ∈ A  ».

Друзья говорят: «Нет, y ∕∈ A  ». Тогда при условии, что правая граница отрезка A  не больше 50  , Amax = (11,50]  (чтобы даже ymax ∕∈ A  ), а его максимальная длина равна 50 − 11 = 39  .

 

Решение 2 (прогой):

def inn(x, A):
    return A[0] <= x <= A[1]

def f(x, y, A):
    S = {23, 27, 45, 46, 47, 67}
    return (((x % 3 != 0) and (not y in S)) <= ((x > 7) <= (y > 11))) 
        or (x * y <= 76) or (not inn(x, A)) or (not inn(y, A))

n = 5
ans = 0
for a in range(1 * n, 50 * n):
    for b in range(a, 50 * n + 1):  # + 1 чтобы проверить саму точку b
        A = [a / n, b / n]
        flag = True
        for x in range(1, 100):
            for y in range(1, 15):
                if not f(x, y, A):
                    flag = False
                    break
            if not flag:
                break
        if flag:
            ans = max(ans, A[1] - A[0])
print(ans)

Ответ: 39
Оцените статью
Я решу все!