什么是质数?
质数(也叫素数)是大于 1 的整数,且只有 1 和它本身两个正约数。如果一个数除了 1 和本身之外还有其他约数,就是合数。数字 1 比较特殊:它只有一个约数,所以既不是质数也不是合数。本计算器会判断你输入的数是质数还是合数,列出它的因数,并显示前一个和后一个质数。
使用方法
在输入框中填入一个大于 1 的整数,然后提交。工具会判定它是质数还是合数,重述这个数,列出它的所有因数(合数才有),并给出比它小的最大质数和比它大的最小质数。
计算原理
我们采用确定性试除法,并结合 \(6k \pm 1\) 优化。首先把 2 和 3 作为已知质数单独处理,并排除偶数和 3 的倍数。接着只检验形如 \(6k-1\) 和 \(6k+1\) 的候选除数(5、7、11、13……),检验范围到 \(n\) 的平方根为止。如果没有任何数能整除 \(n\),那么 \(n\) 就是质数。判定条件为:
$$n = \text{Number} \text{ is prime} \iff n > 1 \;\wedge\; \nexists\, d \in [\,2,\ \lfloor\sqrt{n}\rfloor\,] : n \bmod d = 0$$
之所以只需检验到平方根,是因为任何大于平方根的因数都必然与一个小于平方根的因数配对出现。
实例演示
以 \(n = 97\) 为例。它的平方根约为 \(9.85\)。它是奇数,也不是 3 的倍数。我们检验 5(\(97 \bmod 5 = 2\))和 7(\(97 \bmod 7 = 6\))。下一个候选数是 11,但 \(11 \times 11 = 121 > 97\),于是停止检验。没有找到任何约数,所以 97 是质数。它的前一个质数是 89,后一个质数是 101。
常见问题
1 是质数吗? 不是。1 只有一个约数,所以它既不是质数也不是合数。
2 是质数吗? 是。2 是最小的质数,也是唯一的偶数质数。它没有前一个质数。
为什么只对合数列出因数? 根据定义,质数的因数只有 1 和它本身,所以工具直接说明这一点即可。合数则可能有许多因数,会按从小到大的顺序列出。