前不久我写过一篇 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 个质数,限于篇幅,省略了中间的部分数据。

来源:SQL实现

作者:zero

mysql中输出100内质数_SQL 打印 100 以内的质数相关推荐

  1. JAVA打印300以内的质数

    JAVA打印300以内的质数 package JAVA_Project_01_04;//创建一个包 //具体做法是:先把N个自然数按次序排列起来.1不是质数也不是合数,要划去.第二个数2是质数留下来, ...

  2. MySql中常用的内置函数

    函数中可以将字段名当作变量来用,变量的值就是该列对应的所有值:在整理98在线字典数据时(http://zidian.98zw.com/),有这要一个需求,想从多音字duoyinzi字段值提取第一个拼音 ...

  3. mysql中起飞到达城市查询_SQL航空网的几个航班查询题:

    表结构如下: flight{flightID,StartCityID ,endCityID,StartTime} city{cityID, CityName) 实验环境: create table c ...

  4. python找出10000以内的质数_python求10000以内的质数_10000以内的质数

    展开全部 [ P1- P10] 2 3 5 7 11 13 17 19 23 29 [ P11- P20] 31 37 41 43 47 53 59 61 67 71 [ P21- P30] 73 7 ...

  5. java 10000以内的质数_【10000以内有多少质数】作业帮

    1-10000 共1229个质数 10001-20000一共有 1033个质数 20001-30000一共有 983个质数 30001-40000一共有 958个质数 40001-50000一共有 9 ...

  6. mysql中输出100内质数,oracle中用while循环查询1到100的质数(素数)

    declare i number:=1;  --表示当前数字 j number:=0;  --从2开始,存储判断的数字 sum1 number:=0;--总数 begin while(i<100 ...

  7. mysql中输出100内质数_输出100以内的所有质数--九九乘法表--作业

    set serverout on declare flag boolean; begin for i in 2..100 loop flag:=true; for j in 2..i-1 loop i ...

  8. python中输出菱形_用python打印菱形的实操方法和代码

    python怎么打印菱形?下面给大家带来三种方法: 第一种 rows = int(input('请输入菱形边长:\n')) row = 1 while row <= rows: col = 1 ...

  9. mysql分组后组内排名_SQL实现group by 分组后组内排序

    在一个月黑风高的夜晚,自己无聊学习的SQL的时候,练习,突发奇想的想实现一个功能查询,一张成绩表有如下字段,班级ID,英语成绩,数据成绩,语文成绩如下图 实现 查询出 每个班级英语成绩最高的前两名的记 ...

  10. MySQL中DATE_FORMATE函数内置字符集解析

    今天帮同事处理一个SQL(简化过后的)执行报错: 代码如下 复制代码 mysql> select date_format('2013-11-19','Y-m-d') > timediff( ...

最新文章

  1. struts2教程(10)
  2. 线性Transformer应该不是你要等的那个模型
  3. JAVA.IO字节流
  4. 生成configDataContextRefres失败:Error creating bean with name ‘configDataContextRefresher‘
  5. 简单工厂和策略模式结合
  6. Flinksql读取Kafka写入Iceberg 实践亲测
  7. (补)20200105:整数转罗马数字
  8. ocp最新题库之052新题带答案整理-36题
  9. [转载] python docopt_比较Python命令行解析库– Argparse,Docopt和Click
  10. PHP 中数组获取不到元素
  11. 网约车源码 打车APP 同城打车代驾小程序源码
  12. 大厂UI设计师vs前端工程师的沟通之道
  13. 影响力最大化 模拟爆发(粗糙笔记)
  14. EasyExcel压缩包导出excel,动态生成多表头或多sheet
  15. 网页短信平台国际通道搭建|后台定制-移讯云短信系统
  16. 免安装版(解压缩版)MySQL安装
  17. 量子计算Shor算法
  18. java 反射无参方法_无参构造方法 ? 反射
  19. 手把手教你solidworks重力下落物体动画制作
  20. 老王卖西瓜python_Python老王视频习题答案

热门文章

  1. 0x00007FF73361E515 处(位于 基于多态的职工管理系统.exe 中)引发的异常: 0xC0000005: 职工岗位输入不是1,2,3,而是其他乱七八糟的
  2. PS——ps打开webp格式的图片
  3. 同IP不同端口导致session冲突的解决方法
  4. 海康威视NVR硬盘录像机DS-7808N安装调试教程,监控系统安装教程
  5. Unity发布WebGL后跳转页面的问题
  6. 项目UML设计(团队)
  7. 自考科目列表,自考本科,题库,自学考试,历年真题
  8. 米家扫地机器人静音模式在哪_贵了300块的米家扫地机器人1S 还是那个性价比神器吗?...
  9. 电气-NPN、PNP传感器应用
  10. 随机出题 c语言编程,在Excel中制作单机版随机出题考试系统