HandyTools Hub

质数工具

检查质数、查找因数、生成质数范围

100% 客户端处理

97 is a prime number

2^2 x 3 x 5

The 10th prime is 29

质数工具集把四个计算器打包在一个页面里:判断一个数是不是质数、把它分解成质因数、列出某个区间内的全部质数,或者查找第 N 个质数。它适用于写作业、竞赛练习、约分,或者单纯好奇某个数是不是质数。用顶部按钮切换模式,当前模式的结果随输入更新,每个结果都有自己的复制按钮。

四个模式

模式输入输出
质数判断单个数字质数或合数,若为质数还会给出邻近质数
质因数分解单个数字带指数的分解式与不同质因数个数
区间质数用逗号分隔的两个边界两者之间的每个质数及其个数
第 N 个质数一个位置,例如 10该位置上的质数

判断模式对任何质数输入还会报告下一个和上一个质数,向前向后最多搜索 200。当你需要为哈希表容量或示例挑一个附近质数、又不想靠试错来挑选时,这个功能很好用。

素性判断的原理

所有大于 3 的质数都具有 6k − 1 或 6k + 1 的形式,所以判断器不必测试每个整数。它先排除小于等于 1 的数,接受 2 和 3,排除任何能被 2 或 3 整除的数,然后以 6 为步长成对测试约数 5、7、11、13、17、19……一旦约数的平方超过该数就停止,因为合数必定有一个不大于其平方根的因子。跳过 2 和 3 的倍数大约去掉了三分之二的候选约数,使单个数字的判断即使输入达到百万级也保持快速。

实操示例

  1. 判断 97:平方根约为 9.85,只需测试 5 和 7;两者都除不尽,所以 97 是质数。工具还会报告下一个质数 101 和上一个质数 89。
  2. 判断 91:测试 5 失败,但 7 成功,因为 91 = 7 × 13,所以它是合数。分解模式返回 7 × 13。
  3. 分解 60:2^2 × 3 × 5,因为 60 = 2 × 2 × 3 × 5。工具还会报告共有 3 个不同的质因数。
  4. 区间 1,100:共 25 个质数,从 2、3、5、7、11 开始,到 89、97 结束。
  5. 第 10 个质数:结果是 29。序列开头是 2、3、5、7、11、13、17、19、23、29。

质因数分解与算术基本定理

算术基本定理指出,每个大于 1 的整数都有且只有一种质因数分解。正是这种唯一性,使 91 无论从哪个角度入手都化简为 7 × 13,也使工具能用指数作为简写:2^2 × 3 × 5 表示两个 2、一个 3 和一个 5。同样的分解驱动着许多实际工作,比如约分、求最大公约数和最小公倍数,这些最终都归结为比较质因数。分解也是 RSA 加密背后那种不对称性的来源:把两个大质数相乘很便宜,而从乘积反推回它们却很难。

如何选择模式

  • 只有一个数、要的是是或否的答案时,用质数判断;如果你还想要邻近质数就更合适。
  • 需要分解本身、用于约分或按构成积木比较数字时,用质因数分解。
  • 需要一份列表时用区间质数,比如编程练习里 1000 以内的质数。
  • 知道位置但不知道数值时用第 N 个质数,比如第 100 个质数。

质数在实践中的应用

除了算术练习,质数还有实实在在的分量。RSA 及类似的公钥系统依赖“相乘容易、分解困难”这道鸿沟。哈希表常用质数个桶,以便在取模哈希下更均匀地分散键。Magicicada 属的周期蝉以 13 年和 17 年为周期出土,两者都是质数,这降低了与天敌较短生命周期同步的概率。就连简单的约分也是伪装的分解:把 84/126 约分,就是找出公共的 2 × 3 × 7 并消去它。

局限与边界情况

  • 区间模式和第 N 个质数模式都是暴力遍历。区间模式逐个测试整数而不筛法,第 N 个质数模式逐质数向上计数,所以很大的区间或很大的位置会更慢。
  • 质因数分解使用输入的绝对值,因此负数会报告和正数相同的因数,而质数判断把负数报告为合数。
  • 小数输入会被解析而不是拒绝,但素性只对整数有定义,所以不要把小数结果当作有意义。
  • 区间输入用逗号分隔两个边界;首尾空格会被裁掉,但逗号缺失或多余会报错,而不是猜测你的意图。
  • 除了复制按钮之外没有缓存或导出,页面重载之间无法保存列表。

相关工具

常见问题

这个工具用什么素性测试方法,速度有多快?

它使用带 6k ± 1 优化的试除法:先排除 2 和 3,然后只测试候选约数 5、7、11、13……一直试到该数的平方根。对单个数字来说很快,即使数值在百万级也一样。

为什么分解一个很大的数有时会很慢?

分解会从 3 开始逐个奇数试到剩余值的平方根,没有筛法或更高级的分解算法。一个数如果两个大质因数彼此接近,就会被迫做很多次除法,所以极大的输入可能变慢。

2 是唯一的偶数质数吗?

是。任何大于 2 的偶数都能被 2 整除,所以 2 是唯一的偶数质数。判断器会立即排除所有大于 2 的偶数来处理这一点。

数字 1 的质因数分解显示什么?

1 被当作特殊情况处理,直接显示为 1。它不被视为拥有质因数,这与 1 不是质数是一致的。

区间模式和第 N 个质数模式有什么区别?

区间模式接收两个边界,列出两者之间的每个质数并报告个数。第 N 个质数模式接收一个位置,返回该位置的质数,其中第 1 个是 2,第 10 个是 29。

可以输入小数或负数吗?

数字解析器在判断和分解模式下接受小数和负数。不过素性只对整数有意义,所以想要可预期的结果请用整数。第 N 个质数字段只接受正整数。

由 HandyTools Hub 团队审校 · 最后更新