Найти в Дзене

Алгоритм решения задания 15 ЕГЭ по информатике. Часть 5

Ранее мы уже разобрали алгоритм решения практически всех типов 15 заданий ЕГЭ по информатике. Остался лишь один, самый молодой, тип. Он был замечен в сборнике С.С. Крылова за 2026 год. Возможно, это просто необычный и экспериментальный тип, а возможно, задания с такой формулировкой попадутся на реальном экзамене. В любом случае мы разберём несколько примеров 15 заданий пятого типа и научимся их решать программным способом. Задания данного типа характерны наличием фразы «множество всех натуральных делителей». В остальном же здесь присутствуют привычные нам отрезки и логическое выражение. Вот только найти здесь надо не какое-то значение числа из выражения, не длину отрезка, а число, делители которого составляют некоторое непустое множество C, фигурирующее в логическом выражении. Ввиду того, что в таких заданиях придётся перебирать делители и работать с довольно большими числами, решать мы их будем только программным способом. Но само решение не должно у вас вызывать каких-либо трудностей
Оглавление

Тип 5

Ранее мы уже разобрали алгоритм решения практически всех типов 15 заданий ЕГЭ по информатике. Остался лишь один, самый молодой, тип. Он был замечен в сборнике С.С. Крылова за 2026 год. Возможно, это просто необычный и экспериментальный тип, а возможно, задания с такой формулировкой попадутся на реальном экзамене. В любом случае мы разберём несколько примеров 15 заданий пятого типа и научимся их решать программным способом.

Задания данного типа характерны наличием фразы «множество всех натуральных делителей». В остальном же здесь присутствуют привычные нам отрезки и логическое выражение. Вот только найти здесь надо не какое-то значение числа из выражения, не длину отрезка, а число, делители которого составляют некоторое непустое множество C, фигурирующее в логическом выражении.

Ввиду того, что в таких заданиях придётся перебирать делители и работать с довольно большими числами, решать мы их будем только программным способом. Но само решение не должно у вас вызывать каких-либо трудностей, здесь будут уже привычные логические операторы Python, списочные включения с условием и всё та же функция all() для проверки истинности всех значений некоторой коллекции.

Давайте же приступим к разбору алгоритма решения пятого типа 15 заданий!

Алгоритм решения

Сразу отметим, что заданий данного типа немного, в данной статье будут представлены два примера из сборника Крылова и одно авторское задание. Начнём с такой формулировки из сборника:

Задание 1524

«На числовой прямой дан отрезок A = [3; 60]; B – множество всех натуральных делителей числа 177, отличных от единицы и от самого числа 177; C – множество всех натуральных делителей некоторого натурального числа y, отличных от единицы и от самого числа y (число y таково, что множество C непустое). Укажите наибольшее возможное значение числа y, для которого выражение (x ∈ C) → ((x ∈ A) ∧ ¬ (x ∈ B)) истинно (т.е. принимает значение 1) при любом значении переменной x.»

Первым делом нам следует создать функцию для проверки этого логического выражения:

-2

Сразу запишем границы отрезка A, как это делали с заданиями прошлого типа:

-3

Теперь переходим к множеству B. По аналогии с отрезком A, мы записываем не все возможные числа из этого множества, а условие принадлежности числа к множеству. Как понять, что некоторое число x принадлежит множеству натуральных делителей числа 177 (является его делителем)?

Все просто, остаток от деления 177 на x должен равняться нулю. В Python это можно записать так: B = 177 % x == 0

Но тут важно учесть еще один момент: в условии сказано, что в это множество не входят единица и само число. Тогда давайте потребуем, чтобы x не равнялся единице и 177:

-4

И также поступим с множеством C. Только здесь будут делители не определённого числа 177, а некоторого неизвестного y:

-5

С этим закончили, переписываем логическую функцию из условия:

-6

Теперь давайте перебирать значения для y. Делать это будем в цикле for, левая граница диапазона у нас будет 2 (можно подобрать и другое число, исходя из делимости чисел), а правой границей выберем какое-либо большое число, например, 10 000. Поскольку нам нужно найти наибольшее значение y, то перевернём наш диапазон срезом [::-1]:

-7

В следующей строке будем искать делители числа y. Запись здесь стандартная: проверяем в цикле все числа от 2 до числа, на единицу большего, чем корень из y, если y делится на это число без остатка, то добавляем его в список делителей divs:

-8

Всё, осталось проверить, что список divs не пустой (есть делители, отличные от 1 и самого числа) и что логическая функция выполняется при такой комбинации y и всех значениях x от 1 до, к примеру, 10 000:

-9

Если это условие выполняется, то выводим текущее значение y и завершаем цикл — на этом работа программы окончена.

-10

Давайте проверим работу нашей программы. Запускаем её и видим на экране число 2809. А это и есть ответ на данное задание!

Как и для предыдущих типов данного задания выведем шаблонный код, при условии, что A = [*1, *2], B — множество делителей числа *3:

-11

Пример 1

Давайте по этому же алгоритму решим еще одно задание из сборника:

Задание 1526

«На числовой прямой дан отрезок A = [7; 26]; B – множество всех натуральных делителей числа 77, отличных от единицы и от самого числа 77; C – множество всех натуральных делителей некоторого натурального числа y, отличных от единицы и от самого числа y (число y таково, что множество C непустое). Укажите наименьшее возможное значение числа y, для которого выражение (x ∈ C) → ((x ∈ A) ∧ ¬ (x ∈ B)) истинно (т.е. принимает значение 1) при любом значении переменной x.»

В функции f() меняем числа на те, которые даны в условии (логическое выражение здесь без изменений):

-12

В данном задании требуется найти наименьшее y. Поэтому в коде далее убираем срез [::-1], оставляя всё остальное без изменений:

-13

Запускаем нашу программу и видим результат — число 169. Его и запишем в ответ.

Пример 2

И напоследок рассмотрим задание с авторской формулировкой:

Задание 1527

«На числовой прямой дан отрезок A = [2; 47]; B – множество всех натуральных делителей числа 69, отличных от единицы и от самого числа 69; C – множество всех натуральных делителей некоторого натурального числа y, отличных от единицы и от самого числа y (число y таково, что множество C непустое). Укажите такое значение числа y, имеющее максимальное количество делителей, для которого выражение (x ∈ C) → ((x ∈ A) ∧ ¬ (x ∈ B)) истинно (т.е. принимает значение 1) при любом значении переменной x.»

Обратите внимание, что теперь есть дополнительное условие для y. Мы ищем не просто наибольшее или наименьшее значение этого числа, а то, которое имеет максимальное количество делителей! Давайте посмотрим, как это повлияет на наш код.

Функция f() будет стандартная — меняем только числа:

-14

Далее нам необходимо создать список res, в котором будем хранить в виде кортежей числа y и количество делителей каждого такого числа:

-15

Три строки далее переписываем без изменений:

-16

Но вместо вывода значения y на экран будем сохранять подходящее y и количество элементов в списке divs, то есть количество делителей числа y:

-17

Ну а выводить мы будем то значение y, у которого больше всего делителей. Для этого применим функцию max() к списку res, которая вернёт кортеж с наибольшим значением len(divs). Чтобы вывести само число y, обратимся к элементу кортежа под индексом 1:

-18

После запуска программы мы увидим на экране число 80. Оно и будет ответом на это задание.

Больше заданий данного типа с подробным решением вы можете найти в нашем тренажёре.

<<< Предыдущая статья Первая статья >>>