
Условие: Тип 25 № 33527
Найдите все натуральные числа, принадлежащие отрезку [101 000 000; 102 000 000]
, у которых ровно три различных чётных делителя (при этом количество нечётных делителей может быть любым).
В ответе перечислите найденные числа в порядке возрастания.

Вариант 1: решение через самописную функцию для поиска делителей
Комментарии к первому варианту решения задачи:
- объявляем создание функции под именем
D
принимающую только лишь число х
- найденные делители предлагается хранить в множестве
set()
, так получится быстрее чем со списками list()
- идея в том, что делители делятся ровно на две части: те что лежат до квадратного корня и после него. При этом такие делители образуют между собой пару сомножителей (смотреть picture)

- если наш аргумент
x
делится на переменную j
, то j
является делителем
- в данной задаче, делитель еще необходимо проверить на четность
- и если оба условия истинны, то добавляем такой делитель в множество через метод
.add()
- через
x // j
мы сможем найти еще один делитель, пару числа j
- и аналогично проверим ее на четность
- добавим в множество
- так как по условию нас просят найти “ровно три различных чётных делителя”, нет смысла перебирать числа
х
с большим кол-вом делителей
- если делителей оказалось больше, то прерываем перебор, возвращая множество
dl
- если предыдущий return не сработал и программа дошла до этой строчки, то можно вернуть сортированный список делителей..
для этого используем функцию
sorted()
, которая сортирует любую коллекцию, но возвращает результат в виде списка list()
- функция написана, а значит нам пора пробежать диапазон чисел данных по условию “все натуральные числа, принадлежащие отрезку
[101 000 000; 102 000 000]
”
- вызываем функцию передавая ей числа из диапазона