SQL 求 1000 以内的素数(MySQL8.0 版)

-- 要先把默认的递归深度放开,不然造不了1-1000的数
SET SESSION cte_max_recursion_depth = 1010;
-- 造一个大于等于 2,小于 1000 的除数
with recursive numb(n1) as (
  select 2
  union all
  select n1+1 from numb where n1 < 1000
),
-- 造一个大于等于 2,小于等于 1000 的被除数
prime(n) as (
  select 2
  union all 
  select n+1 from prime where n <= 1000
)
select * 
from prime
where not exists
(
  select * from numb 
  where floor(prime.n/numb.n1)=(prime.n/numb.n1) -- 这里是关键,过滤了中间能整除的数。只有能整除的数,它们的地板除才会等于除运算的结果(也就是0)
  and numb.n1 < prime.n
);
posted @ 2022-01-24 11:16  东围居士  阅读(244)  评论(0编辑  收藏  举报