什么是质数(素数)?定义和判断方法整理

质数看起来像是小学阶段就学过的简单概念,但它准确的定义、手算时最快的判断方法,以及它在现代技术中的重要性,都值得认真梳理一遍。

质数是正因数恰好只有两个的数

质数是大于1的自然数,并且只能被1和它自身整除,没有其他整数因数。"正因数恰好两个"是精确的定义,而不只是"不太好被整除"这种模糊感觉。

为什么1不是质数

1的正因数只有1本身,只有一个而不是两个,所以从定义上就不符合条件。这是一个刻意的数学约定,而不是随意的排除——如果把1也算作质数,会破坏包括质因数分解唯一性在内的一些重要定理。

2是唯一的偶数质数

除2以外的所有偶数,除了能被1和自身整除之外,还能被2整除,因此2是偶数中唯一的例外,也是唯一一个既是偶数又是质数的数。

试除法只需要验证到平方根

要判断一个数n是不是质数,并不需要把从1到n的所有数都验证一遍,只需要检查到√n为止的因数即可。如果到这一步都没有找到因数,那更大的因数也不可能存在,因为任何更大的因数都必须和一个更小、已经被验证过的因数配对。

埃拉托斯特尼筛法可以一次性找出某个范围内的所有质数

这个古老的方法先列出直到某个上限的所有数,然后从2开始系统地划掉每个质数的倍数,最后剩下的就是质数。这是一种批量生成质数列表的高效方法,而不是逐个单独判断。

质数有无穷多个

欧几里得在两千多年前就证明了,任何有限的质数列表都不可能是完整的——把某个有限的质数集合全部相乘再加1,得到的数必然拥有不在原集合中的质因数。

为什么只需要验证到平方根就够了

如果一个数n存在一个大于√n的因数,那么它必然会和一个小于√n的因数配对,因为n的因数总是成对出现、两两相乘等于n。因此只要把候选因数验证到√n(包含√n本身)为止,只要存在因数就一定会被发现,这比一直验证到n本身要快得多。

质数为什么在数学课之外也很重要

现代的加密系统,包括广泛用于保护网络通信安全的RSA算法,都依赖于这样一个特性:把两个很大的质数相乘很容易,但如果不事先知道是哪两个质数,想把相乘得到的这个大数重新分解回原来的质因数,却极其困难。这种不对称性,正是互联网安全很大一部分所依赖的数学基础。

常见问题

1是质数吗?

不是。质数必须恰好有两个不同的正因数,而1只有一个因数(它本身),所以即使在日常语感里它看起来"不太好被分解",也并不满足质数的定义。

手算判断一个数是不是质数,最快的方法是什么?

先排除大于2的所有偶数,然后只验证奇数因数,一直验证到这个数的平方根为止就可以停止。这样可以省去逐一验证每个数这种笨方法所需要的大部分不必要的计算。