Как вывести простые числа от 0 до 1000 на SQL?

Простое число — целое число больше 1 с делителями только 1 и самим собой.

Короткий ответ

Что ответить на собеседовании

Простое число — целое число больше 1 с делителями только 1 и самим собой. Поэтому 0 и 1 исключаем. Если число составное, у него есть делитель не больше квадратного корня: иначе произведение двух делителей было бы больше самого числа.

Подробный разбор

Ответ с пояснениями

Простое число — целое число больше 1 с делителями только 1 и самим собой. Поэтому 0 и 1 исключаем. Если число составное, у него есть делитель не больше квадратного корня: иначе произведение двух делителей было бы больше самого числа.

Решение для PostgreSQL:

SELECT n
FROM generate_series(2, 1000) AS numbers(n)
WHERE NOT EXISTS (
    SELECT 1
    FROM generate_series(
        2, floor(sqrt(n::numeric))::integer
    ) AS divisors(d)
    WHERE n % d = 0
)
ORDER BY n;

Внутренний запрос ищет хотя бы один нетривиальный делитель. NOT EXISTS оставляет только числа без такого делителя. Для 2 и 3 верхняя граница равна 1, поэтому внутренний генератор пуст и оба числа сохраняются. Для 4 находится делитель 2, и число исключается.

Это понятное решение для небольшого заданного диапазона; для значительно больших диапазонов стоит рассмотреть более эффективный алгоритм, например решето. generate_series, sqrt и остаток от деления

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку