293просмотров
12.4%от подписчиков
26 марта 2026 г.
stats📷 ФотоScore: 322
Без этого НЕ РЕШИТЬ задание 25
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
И это оптимальный поиск делителей, который нужно понимать и уметь писать Если искать делители «в лоб», то это выглядит как-то так: def allDivs(n): divs = [] for d in range(1, n+1): if n % d == 0: divs.append(d) return sorted(divs) Вроде все ок, но начиная с 10^8 эта функция уже работает долго, а для 10^9 вообще не выводит результат Будем решать через через перебор до √n, обратимся к математике: Если число n делится на d, то автоматически есть парный делитель n // d, так как n = d * n//d Например:
• 36 делится на 3 → второй делитель 12
• 36 делится на 6 → второй делитель тоже 6 (но это не разные делители, а один и тот же, обращаем на это внимание) ➡️ Все делители идут парами, и один напарник всегда ≤ √n. Соответственно искать делители можно от 1 до √n и добавлять их сразу парами, тогда все работает быстро Полный код функции с комментариями написала на карточке, сохраняй ❤️