Простое число — целое число больше 1 с делителями только 1 и самим собой. Поэтому 0 и 1 исключаем. Если число составное, у него есть делитель не больше квадратного корня: иначе произведение двух делителей было бы больше самого числа.
Как вывести простые числа от 0 до 1000 на SQL?
Простое число — целое число больше 1 с делителями только 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 и остаток от деления