Задание 25 ЕГЭ по информатике 2027: делители, простые числа и маски

Задание 25 ЕГЭ по информатике — программа, которая перебирает числа и отбирает подходящие под условие: числа по маске, которые делятся на заданное число, или числа с простыми множителями нужного вида. Ответ записывают таблицей: найденные числа и для каждого — второе число, которое просит условие.

Как решать

В демоверсии 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.

Типичные ошибки

Потренироваться на тренажёре

Частые вопросы

Что делать, если программа в задании 25 работает слишком долго?

Сократите перебор. Делители ищите до корня из числа, а для масок стройте числа по маске вместо проверки всех чисел подряд. Если программа всё равно идёт дольше минуты, проверьте, не перебирает ли она лишние числа.

Как записывать ответ в задании 25?

Найденные числа — в первом столбце таблицы в порядке возрастания, во втором — число, которое просит условие: частное, наименьший или наибольший делитель, множитель. Лишние строки таблицы оставляют пустыми.

Сколько баллов дают за задание 25?

1 первичный балл. Ответ засчитывают, если вся таблица полностью совпала с эталоном.

Официальные материалы

Другие задания

Все задания и структура экзамена — на странице ЕГЭ по информатике. Соседние разборы: задание 24 и задание 26.

Описание задания сверено 28 сентября 2026 года со спецификацией 2027 года (документы 2027 года). Примеры составлены нами по структуре демоверсии, каждое решение запущено, и напечатанный им ответ совпадает с ответом на странице. Кодолимп не связан с разработчиками экзамена. Заметили неточность — напишите нам.