← Все вопросы

Как решать задание 25 ЕГЭ по информатике (поиск делителей на Python)?

Задан 15 месяцев назад1.5к просмотров2 ответа
10

Задание 25 просит найти числа в диапазоне с определённым количеством делителей или с делителем заданного вида. Перебор делителей в лоб вроде работает, но не уверен в нюансах. Как решать задание 25 на Python?

2 ответа

13
✓ Принятый ответ — помог автору

Задание 25 — поиск чисел в заданном диапазоне с условием на делители (например: «ровно N делителей», «наибольший делитель, кроме самого числа, оканчивается на 3»).

Базовый шаблон — два цикла:

for x in range(A, B+1):          # диапазон из условия
    divs = [d for d in range(1, x+1) if x % d == 0]   # все делители
    if len(divs) == 5:           # условие, например ровно 5 делителей
        print(x, divs[-2])       # часто просят число и его делитель

x % d == 0 — d делит x. Список divs — все делители по возрастанию; divs[-2] — наибольший делитель, кроме самого x (предпоследний).

Ускорение (если диапазон большой и в лоб медленно) — перебирай делители до корня:

def divisors(x):
    res = set()
    d = 1
    while d*d <= x:
        if x % d == 0:
            res.add(d); res.add(x//d)
        d += 1
    return sorted(res)

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

  • забыть, что 1 и само число тоже делители (влияет на «количество делителей»);
  • спутать «наибольший делитель, кроме самого числа» (это divs[-2]) с самим числом;
  • неверные границы диапазона (включительно ли B — обычно да, range(A, B+1)).

Для типичных диапазонов ЕГЭ хватает и прямого перебора делителей.

5

Запомни: число делителей включает и 1, и само число. Поэтому «ровно 2 делителя» — это простые числа, «нечётное число делителей» — точные квадраты. Это часто и есть скрытый смысл условия.

Если просят «наибольший делитель, отличный от самого числа», бери предпоследний в отсортированном списке делителей (или само/минимальный простой множитель). Не путай его с самим числом — это самая частая ошибка в 25.

Ваш ответ

Войдите, чтобы ответить на вопрос.