使用递归cte获取一个范围内的素数列表



我想看看如何使用递归cte获得素数列表。到目前为止,我能够构建一个数字列表:

with recursive range(i) as (
select 1
union all
select i+1 from range
)
select i from range limit 100;

然而,我一直有点卡在如何为每个数字,看看它是否可以被任何更小的数字整除(我不关心效率,如果数字是17,它可以检查所有数字2-16现在)。

这可能有点粗糙,但我做了一个交叉连接并检查了分子/分母的模数是否为零:

with recursive range(i) as (
select 1
union all
select i+1 from range
where i < 20
)
select
numerator.i,
MIN(numerator.i % divisor.i)=0 is_divisible
FROM 
range numerator, range divisor
WHERE 
numerator.i > divisor.i
AND divisor.i >= 2
GROUP BY
numerator.i
HAVING
is_divisible=false

这给了我:

I   IS_DIVISIBLE
3   FALSE
5   FALSE
7   FALSE
11  FALSE
13  FALSE
17  FALSE
19  FALSE

这里有一个更好的答案:这个递归的SQL CTE究竟是如何工作的?

相关内容

  • 没有找到相关文章

最新更新