Untitled

Условие: Тип 25 № 29673

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

Вариант 1: решение поиска делителей, через функцию

Вариант 1: решение поиска делителей, через функцию

Комментарии к первому варианту решения задачи:

  1. создаем функцию для поиска делителей числа x
  2. создаем пустое множество делителей dl (будем складывать делители)
  3. проверяем, является ли корень из x целым числом, если является, то у числа будет квадратный корень - в этой задаче это важно, так как ситуация с нечетным кол-вом делителей (а нам нужно 3 делителя) может происходить только в случае, если найдется квадратный корень числа (делители образуют пары сомножителей в других случаях).
  4. проходимся по всем числам от 2 до корня из x
  5. и проверяем, делится ли x на это число без остатка.
  6. добавляем найденный делитель
  7. и делитель, который получается при делении x на это число (сомножитель) в множество делителей.
  8. возвращаем отсортированный список делителей - функция sorted() вернет отсортированный список
  9. проходимся по всем числам в диапазоне от 123456789 до 223456789 (взяты из условия)
  10. получаем список делителей числа x из функции D(x)
  11. если у числа ровно три делителя
  12. то выводим это число и наибольший делитель используя функцию max()