Найти тему

25 задание ЕГЭ по информатике в 22 строки кода!

Всем привет, продолжаем штурмовать вторую часть ЕГЭ по информатике. Сегодня на очереди 25-ое задание. Поехали!

Задание взято из демонстрационного задания ЕГЭ, Федеральная служба по надзору в сфере образования и науки
Задание взято из демонстрационного задания ЕГЭ, Федеральная служба по надзору в сфере образования и науки

Покажу сразу решение, а после разберём его по кусочкам

Полезных строк тут ровно 22
Полезных строк тут ровно 22

Начинаем разбор по частям мною написанного

Для начала разберёмся с функцией get_m(n).

Эта функция принимает число и возвращает число М. М по задаче - это сумма минимального и максимального натурального делителя числа, не считая 1 и самого числа. Если таких нет, то М равно нулю.

Создаю две переменные. Максимальный и минимальный делители.

-4

Т.к. минимальный делитель - это первый делитель, если мы будем перебирать числа от 2 до n-1, то найдя первый делитель при таком переборе, сразу сохраняем его и прерываем перебор.

-5
range(a, b) - перебор чисел от a включая до b не включая. По сути, [a, b)

То же самое, только с максимальным, но тут перебор будет от n-1 до 2 соответственно

-6
range(start, stop, step) - из подсказок самого Python

Т.к. начальные значения max_divider и min_divider равны нулю, а если мы и находим делитель, то он точно больше 1, то равенство нулю после поиска означает то, что делители не были найдены, откуда следует, что число простое. В таком случае нужно вернуть 0. Но сумма двух нулей и так будет 0. Так что можно просто возвращать сумму этих двух переменных.

-7

Теперь основная часть кода

Создаём переменную number - будет хранить потенциально верное число. Сказано, что числа искать надо после 700000, значит первое потенциально верное число равно 700001.

count - переменная-счётчик, хранит количество найденных чисел. В начале она равно 0.

-8

Запускаем бесконечный цикл. По сути, можно было и с условием сделать, но мне всё равно. for тут плохо подходит - мы не знаем, сколько чисел нужно перебрать, чтобы найти 5 верных.

В цикле получаем число М для текущего числа. В условии сказано, что числа подходит, если М оканчивается на 8. Найти последую цифру просто: это остаток от деления на 10.

Если М оканчивается на 8, то пишем сначала число, а потом его значение М. Всё это сказано в условии задачи. Также не забываем посчитать число, +1 за каждое найденное. Если вывели 5 чисел, то цикл нужно прервать, иначе он будет работать в теории бесконечно.

Также постоянно нужно увеличивать текущее число, мы же сначала попробуем 700001, потом 700002, потом 700003...

-9

Запускаем, спустя полторы секунды видим это:

-10

Это и есть ответ