质数查询与质因数分解
生成器所有处理都在浏览器本地完成,数据不上传服务器
五件事放在一个工具里,因为它们底下是同一个内核:判定一个数是不是质数。「第 1000 个质数是几」「100 到 200 之间有哪些」「随便给我 10 个质数」都只是在这之上换一层壳。拆成五个页面的话,那份判定逻辑要写五遍,而它恰恰是最不能写错的一段。 判定用米勒-拉宾,不是试除到根号。 试除到 √n 对 10 位数还行,对 18 位数就是十亿次除法 —— 页面会直接卡住。米勒-拉宾是概率算法,但取定一组基底后在小范围内是确定正确的:用前 12 个质数作基底,对小于 3.3×10²⁴ 的数没有任何合数能骗过它(这个界已被证明)。超过那个界时会如实标出「这是概率判定」。 分解用 Pollard rho,但基底是确定的:多项式里的常数从 1 开始逐个试,没有随机源,所以同样的输入永远走同样的路径。 分解到不了的位数会如实拒绝,而不是转上几分钟让人以为页面死了。
功能
- 五种用法:判定、分解、第 N 个质数、区间列举、随机生成
- 米勒-拉宾判定:18 位数也是毫秒级,不用试除到根号
- 小于 3.3×10²⁴ 的判定是确定性的;超过会标出这是概率判定
- 质因数分解用 Pollard rho,两个大质数相乘也能拆开
- 判定失败时给出最小的质因数,方便核对
- 分解逐项列出质因数与指数(`2^3 × 3^2 × 5`),每项可单独复制
- 能识破卡迈克尔数(那些能骗过费马小定理的合数)
- 区间最多列 500 个,超出多少会说明
- 全部在本机计算,不依赖任何外部服务
使用方法
- 选做什么:判定、分解、第 N 个、区间,还是随机生成
- 填对应的数值(区间与随机模式要填范围)
- 结果实时出现,点某一行的复制按钮取走结果
常见问题
- 「概率判定」是什么意思?会不会判错?
- 米勒-拉宾是概率算法,但如果固定一组基底,它在某个范围内是没有反例的 —— 数学上已证明:用前 12 个质数(2 到 37)作基底时,任何小于 3.3×10²⁴ 的合数都无法伪装成质数。所以这个范围内的结果是确定的。超过这个界时概率算法仍然极可靠(错误率低于 4⁻¹²),只是不再是数学证明,所以工具会标出来。
- 多大的数还能分解?
- 上限是 18 位。分解用的是试除小质数 + Pollard rho + 米勒-拉宾的组合,18 位(约 60 位二进制)的两个大质数之积通常在一秒内出结果。超过 18 位时会如实拒绝并说明原因,而不是转上几分钟 —— 一个不动的页面比一句「太大了」糟得多。
- 为什么第一个质数是 2,不是 1?
- 因为 1 按定义不是质数(质数要求恰好有两个正因数,而 1 只有一个)。所以「第 1 个质数」是 2,数列从 2, 3, 5, 7, 11… 开始。这个工具在判定 0 与 1 时也会明确说「不是质数」,且不会顺手报一句「最小的质因数是 1」—— 1 不是质数,那样的提示是错的。
相关工具
斐波那契数列
生成器生成斐波那契数列的前 N 项、任意一项或一段,也能反查某个数在第几项。全程 BigInt,第 1000 项的 209 位也一位不差。
随机数生成
生成器生成随机整数或小数:范围、个数、小数位数可调,还能去重、排序、按二/八/十六进制输出。随机源取自浏览器的加密随机数。
进制转换
转换在二、八、十、十六、36、64 进制之间互转,六种结果一次全部给出,19 位的雪花 ID 也能一位不差。全部在浏览器本地完成。
UUID 生成
生成器一次生成一整列 UUID v4、v7、ULID、NanoID 或 MongoDB ObjectId,每行一条,可直接粘进表格或脚本。随机数取自浏览器加密接口,不联网、不记录。
占位文本
生成器生成占位文本,可选拉丁文 Lorem ipsum、英文句子、中文或日文填充句,按段落、句子或单词输出。全部在浏览器本地生成,不联网。
模拟数据
生成器按「字段名:类型」写几行字段,就能得到一整批格式逼真的模拟数据,可导出 JSON、CSV、TSV、SQL、XML、YAML 或 TOML。