Untitled

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

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

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

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

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

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

Untitled

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