Делители и маски чисел в ЕГЭ по информатике: шаблоны на Python
· 2 мин чтения · Редакция Skill Unit
Задачи на делители и маски чисел решаются перебором на Python. Сложность в том, что числа большие: наивный перебор не успевает за время экзамена. Ниже — два шаблона и приёмы, которые ускоряют решение в десятки раз.
Шаблон 1. Все делители числа — до корня
Делители идут парами: если d делит n, то и n // d тоже делитель. Поэтому достаточно перебрать d до √n — это превращает миллион проверок в тысячу.
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 и самого числа, и вывести эти делители. Решение — перебор чисел отрезка и вызов функции для каждого.
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 есть готовая функция сравнения строки с такой маской.
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 задач каждого типа из открытого банка. В курсе по информатике такие задачи разбираются пошагово, а ИИ-преподаватель объясняет ошибки в вашем коде.
Хотите пройти путь на практике?
Курс «ЕГЭ по информатике»: короткие уроки, практические задания и проверка ответов. Первый урок бесплатно.
Смотреть курс