Задание 25 ЕГЭ по информатике 2027: делители, простые числа и маски
Задание 25 ЕГЭ по информатике — программа, которая перебирает числа и отбирает подходящие под условие: числа по маске, которые делятся на заданное число, или числа с простыми множителями нужного вида. Ответ записывают таблицей: найденные числа и для каждого — второе число, которое просит условие.
- Что проверяет: Умение создавать собственные программы (10–20 строк) для обработки целочисленной информации.
- Баллы: 1 первичный балл
- Формат ответа: таблица: в каждой строке два числа, строки по возрастанию первого числа
- Программа: задание решают программой
- Уровень сложности: высокий
- Время: около 20 минут по спецификации
- Кодификатор: 3.4 — алгоритмы обработки натуральных чисел: цифры числа, разложение на простые множители, поиск простых чисел; 2.12 — типовые алгоритмы обработки чисел, числовых последовательностей и массивов
Как решать
В демоверсии 2027 года под номером 25 стоят два варианта через «ИЛИ». В первом нужно перебирать числа больше заданного и найти первые несколько, у которых простые множители или делители обладают свойством из условия. Во втором — найти все числа, которые подходят под маску из цифр и символов «?» и «*» и делятся на заданное число.
Делители ищут до корня из числа: если d делит n, то n // d — тоже делитель. Наименьший делитель числа, больший 1, всегда простой, поэтому проверка «n — произведение двух простых» сводится к двум поискам наименьшего делителя: для n и для n // p (пример 2). Условие цикла пишите в целых числах, d * d <= n, без извлечения корня: так не возникает ошибок округления.
Числа под маску выгоднее строить, чем искать среди всех чисел подряд. Символ «?» — ровно одна цифра, «*» — от нуля до нескольких цифр; сколько цифр может занять «*», считают по ограничению на величину числа. Цифры перебирают функцией product из модуля itertools (пример 1). Модуль fnmatch тоже умеет сверять строку с маской, но тогда приходится перебирать все кратные делителю, и программа работает дольше.
Ответ записывают в таблицу: в первом столбце найденные числа в порядке возрастания, во втором — то, что просит условие. Строк в таблице ответа больше, чем нужно, лишние оставляют пустыми.
Примеры с решением
Пример 1
Назовём маской числа последовательность цифр, в которой могут встречаться символ «?» — ровно одна любая цифра — и символ «*» — любая последовательность цифр, в том числе пустая. Среди натуральных чисел, не превышающих 10⁹, найдите все числа, соответствующие маске 1?23*45 и делящиеся на 1627 без остатка. В ответе запишите в первом столбце таблицы найденные числа в порядке возрастания, а во втором — частные от деления этих чисел на 1627.
Решение на Python
from itertools import product
# Маска 1?23*45: вместо «?» одна цифра, вместо «*» от 0 до 3 цифр —
# так длина числа не больше 9 знаков, то есть число меньше 10**9.
found = []
for q in '0123456789':
for length in range(4):
for star in product('0123456789', repeat=length):
n = int('1' + q + '23' + ''.join(star) + '45')
if n % 1627 == 0:
found.append(n)
for n in sorted(found):
print(n, n // 1627)Ответ:
13235645 8135 102395245 62935 112319945 69035 132332045 81335 152344145 93635 172356245 105935 192368345 118235
Без «*» маска даёт шестизначное число. Числа, не превышающие 10⁹, имеют не больше 9 цифр (само 10⁹ маске не соответствует), поэтому «*» занимает от 0 до 3 цифр. Всего программа строит 10 × (1 + 10 + 100 + 1000) = 11 110 чисел и находит среди них семь кратных 1627.
Пример 2
Напишите программу, которая перебирает целые числа, большие 500 000, в порядке возрастания и ищет среди них числа, равные произведению двух различных простых чисел, каждое из которых оканчивается на цифру 7. В ответе запишите в первом столбце таблицы первые пять найденных чисел в порядке возрастания, а во втором — больший из двух простых множителей каждого числа.
Решение на Python
def smallest_divisor(n):
d = 2
while d * d <= n:
if n % d == 0:
return d
d += 1
return n # делителей до корня нет — число простое
count = 0
n = 500_000
while count < 5:
n += 1
p = smallest_divisor(n)
q = n // p
# n = p * q, где p и q — разные простые, и оба оканчиваются на 7
if p < q and smallest_divisor(q) == q and p % 10 == 7 and q % 10 == 7:
print(n, q)
count += 1Ответ:
500059 71437 500359 3187 500429 29437 500689 71527 500759 71537
Функция smallest_divisor возвращает наименьший делитель числа, больший 1, а для простого числа — само число. Если n = p · q и p — наименьший делитель, то p простое, и остаётся проверить, что q = n // p тоже простое и что p < q: одинаковые множители условие не допускает. Например, 500 059 = 7 · 71 437, и оба множителя оканчиваются на 7.
Типичные ошибки
- Делители ищут до самого числа, а не до корня из него: для чисел около миллиарда такая программа не успевает.
- Корень берут функцией sqrt и сравнивают вещественные числа: на больших числах округление может потерять делитель. Пишите условие d * d <= n.
- Символ «*» в маске считают ровно одной цифрой или забывают, что он может быть пустым.
- Не проверили, что второй множитель тоже простой: у числа 63 наименьший делитель 3, но 63 = 3 · 21, а 21 не простое.
- Числа в таблице стоят не по возрастанию или во втором столбце записано не то, что просит условие.
Потренироваться на тренажёре
Частые вопросы
Что делать, если программа в задании 25 работает слишком долго?
Сократите перебор. Делители ищите до корня из числа, а для масок стройте числа по маске вместо проверки всех чисел подряд. Если программа всё равно идёт дольше минуты, проверьте, не перебирает ли она лишние числа.
Как записывать ответ в задании 25?
Найденные числа — в первом столбце таблицы в порядке возрастания, во втором — число, которое просит условие: частное, наименьший или наибольший делитель, множитель. Лишние строки таблицы оставляют пустыми.
Сколько баллов дают за задание 25?
1 первичный балл. Ответ засчитывают, если вся таблица полностью совпала с эталоном.
Официальные материалы
- Демоверсия, спецификация и кодификатор ЕГЭ 2027 по информатике (архив, проект)
- Открытый банк заданий ЕГЭ
Другие задания
Все задания и структура экзамена — на странице ЕГЭ по информатике. Соседние разборы: задание 24 и задание 26.
Описание задания сверено 28 сентября 2026 года со спецификацией 2027 года (документы 2027 года). Примеры составлены нами по структуре демоверсии, каждое решение запущено, и напечатанный им ответ совпадает с ответом на странице. Кодолимп не связан с разработчиками экзамена. Заметили неточность — напишите нам.