Присоединиться

Информатика·Алгоритмы и программирование·9–11 класс

Найдите все числа от 1000 до 2000, у которых ровно три различных делителя

Условие

Требуется написать программу, которая находит все натуральные числа на отрезке от 1000 до 2000 включительно, имеющие ровно три различных натуральных делителя (единица и само число тоже считаются делителями). Определите, какие это числа, обоснуйте, почему их структура именно такая, и объясните, во сколько примерно раз ускорится проверка одного числа, если перебирать делители не до n, а до квадратного корня из n.

Ответ

1369, 1681 и 1849 — это 37237^2, 41241^2 и 43243^2; перебор делителей до n\sqrt{n} вместо nn ускоряет проверку одного такого числа примерно в 45 раз

Решение по шагам

  1. Шаг 1. Почему у «обычного» числа делителей чётное количество

    Делители любого натурального nn естественно разбиваются на пары: если dd — делитель, то и n/dn/d — тоже делитель, и они «смотрят» друг на друга. Например, для n=12n = 12: пары (1;12)(1;12), (2;6)(2;6), (3;4)(3;4) — всего 6 делителей.

    Пара «схлопывается» в один элемент только тогда, когда d=n/dd = n/d, то есть d2=nd^2 = n.

    Отсюда ключевой вывод: количество делителей нечётно тогда и только тогда, когда nn — полный квадрат. Нам нужно ровно 3 делителя, число нечётное, значит искать надо только среди полных квадратов.

  2. Шаг 2. Какие полные квадраты дают ровно три делителя

    Пусть n=m2n = m^2. Тогда среди делителей заведомо есть 11, mm и m2m^2 — уже три штуки (и они попарно различны при m>1m > 1).

    Чтобы других делителей не появилось, у самого mm не должно быть собственных делителей, кроме 1 и mm: любой делитель qq числа mm, отличный от 1 и mm, добавил бы к списку делителей nn и сам qq, и число qmqm.

    Значит, mm обязано быть простым, и искомые числа — это в точности квадраты простых чисел:

    n=p2,p — простое.n = p^2, \qquad p \text{ — простое}.

    Остаётся понять, какие простые pp дают квадрат внутри отрезка.

Осталось ещё 3 шага — откроются после входа:

  • Шаг 3. Находим границы для основания квадрата
  • Шаг 4. Отбираем простые и выписываем ответ
  • Шаг 5. Оценка ускорения перебора
Получить полное решение

Бесплатно · займёт минуту

Частые ошибки

  • Включают в ответ квадраты составных чисел: 1296 (36236^2), 1600 (40240^2), 1764 (42242^2), 1936 (44244^2) — у них делителей заметно больше трёх.

  • Ищут простые числа из отрезка (1009, 1013 и т. д.): у простого числа ровно два делителя, а не три.

  • Забывают, что 1 и само число тоже считаются делителями, и ищут числа с тремя «собственными» делителями.

  • Берут границы «на глаз» как от 31 до 45 и добавляют лишние 961 или 2025, выходящие за отрезок.

  • В программе пишут for d in range(1, int(n**0.5)) без включения самого корня и теряют делитель mm у полных квадратов — как раз у тех чисел, которые и нужны.

  • При подсчёте делителей через пары дважды считают dd и n/dn/d в случае d2=nd^2 = n и получают 4 делителя вместо 3.

Другие задачи по теме «Алгоритмы и программирование»