如何理解这些结果
下表展示了几个示例输入对应的三项结果。
| 输入 | 是质数吗? | 质因数分解 | 下一个质数 |
|---|---|---|---|
| 97 | 是 | 97 | 101 |
| 84 | 否 | 2 x 2 x 3 x 7 | 89 |
| 100 | 否 | 2 x 2 x 5 x 5 | 101 |
| 2 | 是(唯一的偶质数) | 2 | 3 |
| 1 | 否(既不是质数也不是合数) | - | 2 |
- 1 不是质数:质数必须恰好有两个不同的因数,而 1 只有一个因数。把 1 排除在外,才能保证质因数分解的唯一性。
- 试除法结果精确,但对于非常大的输入速度会变慢;本计算器接受最大 10¹² 的数,此时需要检验到一百万以内的因数。
- 在这个范围内,寻找下一个质数的过程保证能快速结束:根据贝特朗公设,n 和 2n 之间总能找到一个质数。
什么是质数?
质数是大于 1 的自然数,恰好有两个正因数:1 和它本身。最初的几个质数是 2、3、5、7、11、13、17、19、23 和 29。2 是唯一的偶质数,因为其他所有偶数都能被 2 整除。大于 1 且不是质数的数称为合数;按照定义,1 既不是质数也不是合数。
算术基本定理指出,任何大于 1 的整数都可以唯一地(不计因数顺序)写成若干质数的乘积。正是这种唯一的质因数分解,使得质数被称为整数的「构件」:84 = 2² × 3 × 7,没有其他质数组合能相乘得到 84。
质数的个数是无限的——这一结论由欧几里得在公元前 300 年左右证明——而且随着数字增大,质数会变得越来越稀疏,但并没有简单的规律。大质数是现代公钥密码学(如 RSA)的基础,这类密码学依赖于对两个非常大的质数之积进行因数分解在计算上的困难性。
如何使用这个质数计算器
- 输入一个不小于 1 的整数 n。小数会被向下取整为最接近的整数。
- 查看质数判定结果:打勾表示这个数是质数,打叉表示它是合数(或者是 1,两者都不是)。
- 查看质因数分解——等于你输入的数的唯一质数乘积。如果输入的是质数,分解结果就是它本身。
- 查看下一个质数,即严格大于你输入数值的最小质数。
质性检验方法:试除法
一个数 n 是合数,当且仅当它存在一个大于 1、且不超过 n 的平方根的因数。这是因为因数总是成对出现的:如果 n = a × b 且 a ≤ b,那么 a ≤ √n。因此试除法只需要检验到 √n 为止——检验过 2 之后,只需要再检验奇数。
演示(质数):n = 97。97 的平方根约为 9.85,所以只需要检验 2、3、5、7 和 9。97 是奇数;9 + 7 = 16 不能被 3 整除;它不以 0 或 5 结尾;97 / 7 = 13.857…;97 / 9 也不是整数。不存在任何因数,所以 97 是质数。
演示(分解):n = 84。从最小的质数开始依次除:84 / 2 = 42,42 / 2 = 21,21 / 3 = 7,7 本身就是质数。所以 84 = 2 × 2 × 3 × 7 = 2² × 3 × 7。84 之后的下一个质数是 89(85 = 5 × 17,86 = 2 × 43,87 = 3 × 29,88 = 2³ × 11)。
常见错误
- 把 1 当作质数——按照定义,质数必须恰好有两个不同的因数,而 1 只有一个。
- 以为所有质数都是奇数:2 是质数,而且是唯一的偶质数。
- 把因数一直检验到 n,而不是在 √n 处停止——任何合数都存在一个不超过其平方根的因数。
- 以为所有奇数都是质数:9 = 3 × 3,15 = 3 × 5,21 = 3 × 7,都是奇数合数。
- 把质因数分解和普通的因数分解混淆:84 = 4 × 21 是一种因数分解,但质因数分解是 2 × 2 × 3 × 7。
常见问题
怎样检验一个数是不是质数?
检验从 2 到该数平方根之间的每个整数,看是否能整除它。如果都不能整除,这个数就是质数。对于 97,其平方根约为 9.85,而 2、3、5、7、9 都不能整除 97,所以 97 是质数。因数成对出现,保证了任何合数都存在一个不超过其平方根的因数。
为什么 1 不是质数?
质数被定义为恰好有两个不同的正因数——1 和它本身;而 1 只有一个因数。这个定义同时也保护了算术基本定理:如果 1 是质数,因数分解就不再唯一了(6 = 2 × 3 = 1 × 2 × 3 = 1 × 1 × 2 × 3,以此类推)。
什么是质因数分解?
它是把一个数表示为若干质数的乘积,根据算术基本定理,这种分解(不计顺序)是唯一的。例如,84 = 2 × 2 × 3 × 7。求法是反复除以能整除它的最小质数,直到余下的商为 1 或本身就是质数。
2 是质数吗?
是的——2 是质数,因为它的因数只有 1 和 2,而且它是唯一的偶质数。其他所有偶数都能被 2 整除,因此都是合数。这也是为什么质性检验通常单独处理 2,然后只检验奇数候选值。
质数一共有多少个?
有无穷多个,正如欧几里得在公元前 300 年左右证明的:给定任意有限的质数列表,把它们全部相乘再加 1 得到的数,不能被列表中任何一个质数整除,说明列表中遗漏了某个质数。随着数字增大,质数会变得越来越稀疏——根据质数定理,n 附近质数的密度大致是 1 / ln(n)——但它们永远不会枯竭。
为什么质数在密码学中很重要?
像 RSA 这样的公钥系统依赖于一种不对称性:把两个大质数相乘很容易,但从它们的乘积反推出这两个质数,在实际使用的规模下(数百位数字)在计算上非常困难。安全密钥正是基于这样的乘积构建的,因此质数的生成和质性检验是密码学的核心运算。
参考文献
- Weisstein, Eric W. "Prime Number" and "Fundamental Theorem of Arithmetic." MathWorld — A Wolfram Web Resource. mathworld.wolfram.com.
- Hardy GH, Wright EM. An Introduction to the Theory of Numbers. Oxford University Press (primes, unique factorization, Bertrand's postulate).
- Euclid. Elements, Book IX, Proposition 20 (infinitude of primes).