
Условие: Тип 25 № 29673
Назовём нетривиальным делителем натурального числа его делитель, не равный единице и самому числу.
Например, у числа 6 есть два нетривиальных делителя: 2 и 3.
Найдите все натуральные числа, принадлежащие отрезку [123456789, 223456789]
и имеющие ровно три нетривиальных делителя.
Для каждого найденного числа запишите в ответе его наибольший нетривиальный делитель.
Ответы расположите в порядке возрастания.

Вариант 1: решение поиска делителей, через функцию
Комментарии к первому варианту решения задачи:
- создаем функцию для поиска делителей числа
x
- создаем пустое множество делителей
dl
(будем складывать делители)
- проверяем, является ли корень из x целым числом, если является, то у числа будет квадратный корень - в этой задаче это важно, так как ситуация с нечетным кол-вом делителей (а нам нужно 3 делителя) может происходить только в случае, если найдется квадратный корень числа (делители образуют пары сомножителей в других случаях).
- проходимся по всем числам от 2 до корня из
x
- и проверяем, делится ли x на это число без остатка.
- добавляем найденный делитель
- и делитель, который получается при делении
x
на это число (сомножитель) в множество делителей.
- возвращаем отсортированный список делителей - функция
sorted()
вернет отсортированный список
-
- проходимся по всем числам в диапазоне от
123456789
до 223456789
(взяты из условия)
- получаем список делителей числа x из функции
D(x)
- если у числа ровно три делителя
- то выводим это число и наибольший делитель используя функцию
max()