mysql中输出100内质数_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 个质数,限于篇幅,省略了中间的部分数据。
来源:SQL实现
作者:zero
mysql中输出100内质数_SQL 打印 100 以内的质数相关推荐
- JAVA打印300以内的质数
JAVA打印300以内的质数 package JAVA_Project_01_04;//创建一个包 //具体做法是:先把N个自然数按次序排列起来.1不是质数也不是合数,要划去.第二个数2是质数留下来, ...
- MySql中常用的内置函数
函数中可以将字段名当作变量来用,变量的值就是该列对应的所有值:在整理98在线字典数据时(http://zidian.98zw.com/),有这要一个需求,想从多音字duoyinzi字段值提取第一个拼音 ...
- mysql中起飞到达城市查询_SQL航空网的几个航班查询题:
表结构如下: flight{flightID,StartCityID ,endCityID,StartTime} city{cityID, CityName) 实验环境: create table c ...
- 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 ...
- java 10000以内的质数_【10000以内有多少质数】作业帮
1-10000 共1229个质数 10001-20000一共有 1033个质数 20001-30000一共有 983个质数 30001-40000一共有 958个质数 40001-50000一共有 9 ...
- mysql中输出100内质数,oracle中用while循环查询1到100的质数(素数)
declare i number:=1; --表示当前数字 j number:=0; --从2开始,存储判断的数字 sum1 number:=0;--总数 begin while(i<100 ...
- 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 ...
- python中输出菱形_用python打印菱形的实操方法和代码
python怎么打印菱形?下面给大家带来三种方法: 第一种 rows = int(input('请输入菱形边长:\n')) row = 1 while row <= rows: col = 1 ...
- mysql分组后组内排名_SQL实现group by 分组后组内排序
在一个月黑风高的夜晚,自己无聊学习的SQL的时候,练习,突发奇想的想实现一个功能查询,一张成绩表有如下字段,班级ID,英语成绩,数据成绩,语文成绩如下图 实现 查询出 每个班级英语成绩最高的前两名的记 ...
- MySQL中DATE_FORMATE函数内置字符集解析
今天帮同事处理一个SQL(简化过后的)执行报错: 代码如下 复制代码 mysql> select date_format('2013-11-19','Y-m-d') > timediff( ...
最新文章
- struts2教程(10)
- 线性Transformer应该不是你要等的那个模型
- JAVA.IO字节流
- 生成configDataContextRefres失败:Error creating bean with name ‘configDataContextRefresher‘
- 简单工厂和策略模式结合
- Flinksql读取Kafka写入Iceberg 实践亲测
- (补)20200105:整数转罗马数字
- ocp最新题库之052新题带答案整理-36题
- [转载] python docopt_比较Python命令行解析库– Argparse,Docopt和Click
- PHP 中数组获取不到元素
- 网约车源码 打车APP 同城打车代驾小程序源码
- 大厂UI设计师vs前端工程师的沟通之道
- 影响力最大化 模拟爆发(粗糙笔记)
- EasyExcel压缩包导出excel,动态生成多表头或多sheet
- 网页短信平台国际通道搭建|后台定制-移讯云短信系统
- 免安装版(解压缩版)MySQL安装
- 量子计算Shor算法
- java 反射无参方法_无参构造方法 ? 反射
- 手把手教你solidworks重力下落物体动画制作
- 老王卖西瓜python_Python老王视频习题答案
热门文章
- 0x00007FF73361E515 处(位于 基于多态的职工管理系统.exe 中)引发的异常: 0xC0000005: 职工岗位输入不是1,2,3,而是其他乱七八糟的
- PS——ps打开webp格式的图片
- 同IP不同端口导致session冲突的解决方法
- 海康威视NVR硬盘录像机DS-7808N安装调试教程,监控系统安装教程
- Unity发布WebGL后跳转页面的问题
- 项目UML设计(团队)
- 自考科目列表,自考本科,题库,自学考试,历年真题
- 米家扫地机器人静音模式在哪_贵了300块的米家扫地机器人1S 还是那个性价比神器吗?...
- 电气-NPN、PNP传感器应用
- 随机出题 c语言编程,在Excel中制作单机版随机出题考试系统