Новая Школа - онлайн-школа подготовки к ЕГЭ
Информатика · 11 класс Задача №3537430
А
Аноним
16 декабря 2025 05:36 · публичный вопрос
А
Аноним

Задание 18. ИНФОРМАТИКА Примерное время выполнения - 20 минут Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку 1400 200; 400 220], числа,…

Запрос пользователя

Задание 18. ИНФОРМАТИКА Примерное время выполнения - 20 минут Напишите программу, которая ищет среди целых чисел, принадлежащих числовому отрезку 1400 200; 400 220], числа, имеющие ровно четыре различных натуральных делителя. Для каждого найденного числа выведите эти четыре делителя в строку через пробел. Они должны следовать в порядке возрастания. Например, в диапазоне [9; 11] ровно четыре различных натуральных делителя имеет число 10, поэтому для такого диапазона вывод на экране должен содержать следующие значения: 1 25 10

Ответ нейросети
16 декабря 2025 05:36

Задача понятна. Ниже дам подробное решение для учащихся 11 класса информатики и приведу рабочий пример кода на Python. В примере поясню идею и дам корректный вывод для диапазона [9; 11].

Что требуется

  • Найти в заданном целочисленном диапазоне [L; R] все числа, у которых ровно четыре различных натуральных делителя.
  • Для каждого такого числа вывести эти четыре делителя в порядке возрастания, через пробел.
  • Пример: для диапазона [9; 11] число 10 имеет делители 1, 2, 5, 10, поэтому вывод будет: "1 2 5 10".

Ключевая идея Числа, имеющие ровно четыре делителя, бывают двух типов:

  • n = p^3, где p — простое. Дваждыкратно умножая: делители — 1, p, p^2, p^3.
  • n = p · q, где p и q — различные простые. Делители — 1, p, q, p·q.

Эти два случая покрывают все возможные числа с ровно четырьмя делителями.

План решения

  • Пройти по всем целым числам n в диапазоне [L, R].
  • Найти все делители n. Самый простой способ: пройти d от 1 до sqrt(n). Если n делится на d, то d и n/d — оба делителя.
  • Собрать все делители, отсортировать их и проверить, что их ровно четыре.
  • Если да — вывести их в порядке возрастания.

Алгоритм (псевдокод)

  • Для n в [L, R]:
    • divisors = пустой список
    • для d от 1 до floor(sqrt(n)):
      • если n mod d == 0:
        • добавить d в divisоры
        • если d != n/d: добавить n/d
    • если длина divisors == 4:
      • отсортировать divisors и вывести их как строку "d1 d2 d3 d4"

Пример вывода

  • Для диапазона [9; 11]:
    • n = 9: делителей 1, 3, 9 (3 делителя) — пропускаем
    • n = 10: делители 1, 2, 5, 10 — выводим: 1 2 5 10
    • n = 11: делителей 1, 11 (2 делителя) — пропускаем
  • Итоговый вывод: одна строка "1 2 5 10"

Пример кода на Python

  • Вход: два целых числа L и R (можно подать через стандартный ввод).
  • Вывод: для каждого числа с ровно четырьмя делителями выведите четыре делителя в одной строке.

Программа (Python 3)

def find_numbers_with_four_divisors(L, R): for n in range(L, R + 1): divisors = [] limit = int(n**0.5) for d in range(1, limit + 1): if n % d == 0: divisors.append(d) other = n // d if other != d: divisors.append(other) if len(divisors) == 4: divisors.sort() print(' '.join(map(str, divisors)))

if name == "main": import sys data = sys.stdin.read().strip().split() if len(data) >= 2: L, R = map(int, data[:2]) else: # Пример по умолчанию, если вход не указан L, R = 9, 11 find_numbers_with_four_divisors(L, R)

Как это работает

  • Для каждого n мы находим все делители за счет пары (d, n/d) при d, делящем n.
  • Если таких делителей ровно четыре, мы сортируем их и выводим.
  • В простейшем случае это работает за время примерно O((R-L+1) * sqrt(n)), что достаточно для школьной задачи с умеренными диапазонами.

Замечания по заданному тексту задачи

  • В примере вывода для диапазона [9; 11] правильный набор делителей для числа 10: "1 2 5 10" (в тексте примера допущена ошибка — там было написано "1 25 10").
  • Если вам дан совсем другой диапазон, просто передайте его в программу как два числа L и R. Программа распознает и выведет подходящие строки для каждого подходящего n.

Дополнительное примечание

  • Если хотите оптимизировать под большие диапазоны, можно вместо перебора всех делителей для каждого n применить факторизацию по малым простым и использовать формулу количества делителей. Но для задачи 11 класса и диапазона, как правило, достаточно простого метода через sqrt(n).