SQL 找出 100 以内的质数
时间:2022-07-22
本文章向大家介绍SQL 找出 100 以内的质数,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
之前我写了一篇文章 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 语法,稍微改下就能运行。
第 2 步,找到质数
假如我们要判断 seq
表中的 31 是不是质数,只需检查 seq
表中从 2 - 5 可以整除 31 的有多少个,如果一个也没有,则说明 31 是质数。对应的 SQL 可以这么写:
SELECT
num AS prime
FROM
seq a
WHERE 0 >=
(SELECT
COUNT(*)
FROM
seq b
WHERE b.num <= SQRT(a.num)
AND a.num % b.num = 0)
如果觉得 0 > = (SELECT COUNT(*) ...)
这种写法不好理解,也可以改写成 NOT EXISTS
的写法,完整的 SQL 如下:
WITH recursive seq (num) AS
(SELECT
2 AS num
UNION
ALL
SELECT
num + 1 AS num
FROM
seq
WHERE num < 100)
SELECT
num AS prime
FROM
seq a
WHERE NOT EXISTS
(SELECT
NULL
FROM
seq b
WHERE b.num <= SQRT(a.num)
AND a.num % b.num = 0)
打印出来的结果:
prime
--------
2
3
5
7
...
...
89
97
100 以内总共有 25 个质数,限于篇幅,省略了中间的部分数据。
- Quartz.net官方开发指南 第七课 : TriggerListeners和JobListeners
- Quartz.net官方开发指南 第八课:SchedulerListeners
- 为WordPress 后台编辑器文本模式(HTML模式)添加按钮
- 360安全扫描之WordPress 页面异常导致本地路径泄漏 的漏洞修补
- Quartz.net官方开发指南 第九课: JobStore
- 数据中心运营中出现的错误
- Quartz.net官方开发指南 第十课: 配置、资源使用以及SchedulerFactory
- WCF服务上应用protobuf
- Quartz.net官方开发指南 第十一课: 高级(企业级)属性
- Quartz.net官方开发指南 第十二课:Quartz 的其他特性
- Protocol Buffers的应用
- WordPress 显示数据库查询次数、查询时间及内存占用的代码
- WCF服务在高负载下可能会变慢
- WordPress 后台管理菜单名称重命名的方法
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- Android实现桌面悬浮小火箭效果
- Android数据库中事务操作方法之银行转账示例
- Android实现QQ登录功能
- Devtools 老师傅养成[6] - Performance 面板
- RecyclerView上拉加载封装代码
- Devtools 老师傅养成[7] - Memory 内存
- Android实现简单的城市列表功能
- Android Animation之TranslateAnimation(平移动画)
- Android自定义View实现箭头沿圆转动实例代码
- Android 中Context的使用方法详解
- Android自定义水平渐变进度条
- Android+SQLite数据库实现的生词记事本功能实例
- Android 设置颜色的方法总结
- Android支付宝支付的示例代码
- 试图解释清楚【JavaScript Event Loop】