Обозначим через ДЕЛ(n, m) утверждение «натуральное число n делится без остатка на натуральное число m». Пусть на числовой прямой дан отрезок B = [70; 90]. Для какого наибольшего натурального числа A логическое выражение
ДЕЛ(x, A) ∨ ((x ∈ B) → ¬ДЕЛ(x, 22))
истинно (т.е. принимает значение 1) при любом целом положительном значении переменной x?
Ответ:
ЕГЭ по информатике Основная волна 08.06.2024 kompege.ru – задание №15
Решение:
|
1 2 3 4 5 6 7 |
for a in range(1, 1000): f = True for x in range(1, 1000): if ((x%a==0) or ((70<=x<=90) <= (x%22!=0))) == False: f = False if f: print(a) |
…
22
44
88
Этот код предназначен для нахождения наибольшего натурального числа A, для которого логическое выражение ДЕЛ(x, A) ∨ ((x ∈ B) → ¬ДЕЛ(x, 22)) истинно для любого положительного целого числа x. Вот как он работает:
for a in range(1, 1000):Этот цикл перебирает возможные значения A от 1 до 999.f = TrueУстанавливает флагfв значение True. Этот флаг поможет нам определить, истинно ли логическое выражение для всех x.for x in range(1, 1000):Этот цикл перебирает возможные значения x от 1 до 999.if ((x%a==0) or ((70<=x<=90) <= (x%22!=0))) == False:Это проверяет логическое выражение для каждого x:x%a==0проверяет, делится ли x на a (т.е. удовлетворяет ли x ДЕЛ(x, A)).(70<=x<=90)проверяет, находится ли x в диапазоне [70, 90] (т.е. принадлежит ли x интервалу B).(x%22!=0)проверяет, не делится ли x на 22 (т.е. не удовлетворяет ли x ДЕЛ(x, 22)).- Общее выражение
((x%a==0) or ((70<=x<=90) <= (x%22!=0)))проверяет, делится ли x на a или, если x находится в диапазоне [70, 90], то x не делится на 22.
Если выражение ложно для любого x, мы устанавливаем флаг
fв значение False.if f:Если флагfостается True после всех итераций x, это означает, что логическое выражение истинно для всех x от 1 до 999 для текущего значения a.print(a)Выводит значение a, для которого логическое выражение истинно для всех x.
В данном случае код выведет наибольшее значение A, для которого логическое выражение истинно для любого положительного целого числа x.
Ответ: 88
