piapia123
zh

质数查询与质因数分解

生成器

所有处理都在浏览器本地完成,数据不上传服务器

输出

五件事放在一个工具里,因为它们底下是同一个内核:判定一个数是不是质数。「第 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 个,超出多少会说明
  • 全部在本机计算,不依赖任何外部服务

使用方法

  1. 选做什么:判定、分解、第 N 个、区间,还是随机生成
  2. 填对应的数值(区间与随机模式要填范围)
  3. 结果实时出现,点某一行的复制按钮取走结果

常见问题

「概率判定」是什么意思?会不会判错?
米勒-拉宾是概率算法,但如果固定一组基底,它在某个范围内是没有反例的 —— 数学上已证明:用前 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 不是质数,那样的提示是错的。

相关工具