Найти в Дзене

Разбор номера #yandex по информатике #ЕГЭ25

Автор: Джобс Е.
Уровень: Базовый Назовём нетривиальным делителем натурального числа его делитель, не равный единице и самому числу. Найдите все натуральные числа, принадлежащие отрезку [106732567; 152673836] и имеющие ровно три нетривиальных делителя. Для каждого найденного числа запишите в ответе само число и его наибольший нетривиальный делитель. Найденные числа расположите в порядке возрастания. Например, для числа 2018 имеем следующие делители 2 и 1009. Поэтому результатом (не принимая во внимание количества делителей) будет пара чисел 2018 1009. Больше разборов на эту и другие задачи вы можете найти в нашем Телеграм канале: Информатика ЕГЭ | itpy 👨‍💻 Подписывайтесь на наш канал по теории Python: Азим вкатывается в IT | itpy 💻  Вы найдете тут много полезного!
Оглавление

Автор: Джобс Е.
Уровень:
Базовый

Условие задачи:

Назовём нетривиальным делителем натурального числа его делитель, не равный единице и самому числу. Найдите все натуральные числа, принадлежащие отрезку [106732567; 152673836] и имеющие ровно три нетривиальных делителя. Для каждого найденного числа запишите в ответе само число и его наибольший нетривиальный делитель. Найденные числа расположите в порядке возрастания.

Например, для числа 2018 имеем следующие делители 2 и 1009. Поэтому результатом (не принимая во внимание количества делителей) будет пара чисел 2018 1009.

Код решения:

Ответ:
112550881 1092727
131079601 1225043
141158161 1295029
Ответ: 112550881 1092727 131079601 1225043 141158161 1295029

Комментарии к коду:

  1. def divisors(x):
    Объявление функции divisors, которая принимает число x и возвращает его делители.
  2. div = []
    Создание пустого списка div для хранения делителей.
  3. for j in range(2, int(x**0.5)+1):
    Цикл по возможным делителям от 2 до квадратного корня из x (включительно).
  4. if x % j == 0:
    Проверка, делится ли x на j без остатка.
  5. div.append(j)
    Если j - делитель, добавляем его в список.
  6. div.append(x // j)
    Добавляем парный делитель (x разделить на j).
  7. return sorted(set(div))
    Возвращаем отсортированный список уникальных делителей.
  8. for x in range(106732567, 152673836+1):
    Основной цикл по числам от 106732567 до 152673836 включительно.
  9. if (x**0.5).is_integer():
    Проверка, является ли x полным квадратом (квадратный корень - целое число).
  10. d = divisors(x)
    Если x - полный квадрат, находим все его делители.
  11. if len(d) == 3:
    Проверяем, что у числа ровно 3 делителя (не считая 1 и само число).
  12. print(x, max(d))
    Если условие выполняется, выводим число и его наибольший делитель.
Больше разборов на эту и другие задачи вы можете найти в нашем Телеграм канале: Информатика ЕГЭ | itpy 👨‍💻
Подписывайтесь на наш канал по теории Python: Азим вкатывается в IT | itpy 💻  Вы найдете тут много полезного!