Делители и маски чисел в ЕГЭ по информатике: шаблоны на Python

· 2 мин чтения · Редакция Skill Unit

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

Шаблон 1. Все делители числа — до корня

Делители идут парами: если d делит n, то и n // d тоже делитель. Поэтому достаточно перебрать d до √n — это превращает миллион проверок в тысячу.

PythonДелители числа
def divisors(n):
    res = set()
    d = 1
    while d * d <= n:
        if n % d == 0:
            res.add(d)
            res.add(n // d)
        d += 1
    return sorted(res)

print(divisors(36))  # [1, 2, 3, 4, 6, 9, 12, 18, 36]

Множество (set) нужно, чтобы не записать корень дважды: у 36 делитель 6 встретится в паре сам с собой.

Пример условия с делителями

Типичная формулировка: найти числа на отрезке, у которых ровно четыре натуральных делителя, отличных от 1 и самого числа, и вывести эти делители. Решение — перебор чисел отрезка и вызов функции для каждого.

PythonПеребор отрезка
for n in range(250_000, 250_101):
    ds = [d for d in divisors(n) if d != 1 and d != n]
    if len(ds) == 4:
        print(n, *ds)

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

Шаблон 2. Маска числа через fnmatch

Маска — запись вида «12??4*5», где «?» — ровно одна любая цифра, «*» — любая последовательность цифр, в том числе пустая. В Python есть готовая функция сравнения строки с такой маской.

PythonЧисла по маске, кратные 2023
from fnmatch import fnmatch

for n in range(0, 10**9, 2023):
    if fnmatch(str(n), '12??4*5'):
        print(n, n // 2023)

Главный ускоритель — шаг range. Если нужны числа, кратные 2023, перебирайте с шагом 2023, а не проверяйте каждое число. Так проверок становится в 2023 раза меньше.

Как ещё ускорить перебор

  • Начинайте не с нуля: если маска начинается с «12», числа меньше 12… не подойдут — оцените нижнюю границу.
  • Ограничьте верхнюю границу из условия: «не превышающие 10⁹».
  • Не печатайте лишнего внутри цикла: вывод на экран тоже занимает время.
  • Если перебор всё равно долгий, переверните задачу: генерируйте числа из маски, а не проверяйте все подряд.

Частые ошибки

  • Перебор делителей до n вместо √n — программа не успевает.
  • Забытое условие «отличные от 1 и самого числа».
  • Путаница «?» и «*»: «?» — ровно одна цифра.
  • Неверный порядок вывода: в ответе важна последовательность строк.

Как тренироваться

Сохраните оба шаблона в отдельный файл и решите по 5 задач каждого типа из открытого банка. В курсе по информатике такие задачи разбираются пошагово, а ИИ-преподаватель объясняет ошибки в вашем коде.

Хотите пройти путь на практике?

Курс «ЕГЭ по информатике»: короткие уроки, практические задания и проверка ответов. Первый урок бесплатно.

Смотреть курс