前不久我写过一篇 SQL 生成斐波那契数列,今天就来实现使用 SQL 获取 100 以内的质数。
先来看下质数的定义(以下定义摘选自百度百科):质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数。
判断一个大于 2 的正整数是否是质数,通常使用的算法是:
假设该数是 n,用 2 到
的数去整除 n,如果能被整除,则说明 n 是合数,否则该数是质数。
那具体到 SQL 里该怎么实现呢?
第 1 步,生成 2 - 100 的自然数列
如果你已经有了一张数字辅助表,那么可以从这张辅助表中获取 2 - 100 的自然数列。如果什么都没有,则使用下面的脚本就能生成 2 - 100 的数。
WITH recursive seq (num) AS
(SELECT
2 AS num
UNION
ALL
SELECT
num + 1 AS num
FROM
seq
WHERE num < 100)
SELECT
*
FROM
seq
上面这段 SQL 在 MySQL 8.0+ 的版本上可以运行,如果使用其它数据库,只要支持 CTE 语法,稍微改下就能运行。