上一节我们一直在看“整除”。也就是:一个数能不能刚好除尽另一个数。这一节,我们换个角度看整数本身。 有些数可以继续拆开,比如:
也可以继续拆成:
但有些数就不太一样。
比如 ,你想把它写成两个比它小的正整数相乘,怎么试都不行。
这种“拆不开”的数,就是我们今天要讲的素数。
能被拆开的数,就是合数。

判断一个数是不是素数,最直接的方法是看它有几个正因数。
比如 的正因数是:
它除了 和自己以外,还有 和 ,所以 可以拆开:
再看 :
它也能拆开,所以 不是素数。
但 的正因数只有:
除了 这种写法,它没有别的拆法。
所以 是素数。
素数(质数)的定义:如果一个正整数 满足 ,并且它的正因数只有 和 本身,那么 就是素数。
大于 的正整数里,不是素数的数叫合数。
也就是说,合数至少还有一个“额外因数”。
这里一定要单独说一下 。
不是素数,也不是合数。
为什么?
因为素数要有两个正因数: 和它自己。
但 只有一个正因数,就是 本身。
它也不是合数,因为它没有办法拆成两个大于 的正整数相乘。
所以 比较特殊,我们把它单独放在一边。
最小的素数是 。
接下来是:
你会发现,除了 以外,其他素数都是奇数。
原因很简单:任何大于 的偶数,都能被 整除,所以一定不是素数。
因此, 是唯一的偶素数。
判断一个数是不是素数,最朴素的方法就是试除。
比如要判断 是不是素数,就看有没有一个比 大、比 小的数能整除它。
如果找到了,它就是合数。
如果找不到,它就是素数。
不过,我们不需要一直试到 。
只需要试到:
为什么?
如果 能拆成:
并且 ,那么较小的那个因数 一定不会超过 。
所以,只要在 到 之间找不到因数,就可以确定 是素数。
比如判断 。
因为:
所以只需要试 。
不能被 、、、 整除。
因此 是素数。
实际做题时,我们通常只试素数。
不用试 这类合数,因为如果一个数能被它们整除,通常早就会被更小的素因数发现。
试除法很适合手算小数。
如果是特别大的数,计算机还会用更快的素数检测方法。不过在这里,掌握试除法就够用了。
如果我们不是判断一个数,而是想找出 到 之间所有素数,就可以用筛法。
它的想法很像筛米。
把合数筛掉,剩下的就是素数。
做法是这样的:
先从 开始。
是素数,把 留下,然后划掉所有 的倍数:
再看下一个没被划掉的数,是 。
是素数,把 留下,然后划掉所有 的倍数:
继续这样做。
每次遇到一个还没被划掉的数,就说明它是素数;然后把它的倍数划掉。
以找 以内的素数为例。
先保留 ,划掉 的倍数。
再保留 ,划掉 的倍数。
再保留 ,划掉 的倍数。
因为:
筛到 就差不多了。
最后留下:
这就是 以内的全部素数。
筛法的好处是:范围很大时,它比一个一个判断快得多。
素数为什么重要?
因为所有大于 的正整数,都可以拆成素数相乘。
而且拆法本质上只有一种。
算术基本定理(唯一分解定理):每一个大于 的正整数,都可以唯一地写成若干素数的乘积。
如果把相同的素数合并成指数形式,可以写成:
比如:
这些分解就像整数的“乘法身份证”。
顺序可以换,比如 和 没区别。
但里面有哪些素数、每个素数出现几次,是确定的。
这也是为什么 不能算素数。
如果把 也算作素数,那么:
也可以写成:
还可以写成:
这样一来,分解就不唯一了。
所以 必须单独放着,不归入素数。
学到这里,一个很自然的问题会出现:
素数会不会有一天被数完?
答案是:不会。
素数有无穷多个。
这个结论很早以前就由欧几里得证明了,而且证明非常漂亮。
定理:素数有无穷多个。
我们用反证法来想。
假设素数只有有限多个,并且已经全部列出来了:
现在把它们全部乘起来,再加 :
这个新数 很关键。
因为它除以列表里的任何一个素数,都会余 。
也就是说,列表里的素数没有一个能整除 。
那 会是什么?如果 本身是素数,那它就是一个没在列表里的新素数。
这和“列表已经包含全部素数”矛盾。如果 是合数,那它一定有素因数。但这个素因数也不可能在原来的列表里,因为原列表里的素数都不能整除 。
这同样说明:还有新的素数没有被列出来。所以,“素数只有有限多个”这个假设不成立。 素数必定有无穷多个。
注意,这个证明不是说 一定是素数。有时候 也可能是合数。
但没关系。
只要 有素因数,这些素因数就一定不在原来的列表里。 这就是证明最巧妙的地方。
素数有无穷多个,但它们不是平均出现的。
越往后,素数一般越稀疏。
比如:
你会看到,范围越大,素数所占的比例越小。
不过,它们不会消失。
数学家用 表示“不超过 的素数个数”。
素数定理告诉我们:
这句话不用现在完全吃透。
你可以先把它理解成:在很大的数附近,素数出现得越来越稀疏,但稀疏得很有规律。
素数的分布里还有很多著名难题,比如哥德巴赫猜想和黎曼假设。
所以,素数虽然定义很简单,但背后藏着非常深的数学。
题目:判断 是否为素数。
先确定要试到哪里。
因为:
所以只需要试不超过 的素数:
题目:写出 的标准素因数分解。
从最小的素数 开始除。
题目:用筛法找出 以内的全部素数。
先看筛到哪里。
因为:
所以筛到 就够了。
题目:证明:若 ,则 必有至少一个素因子。
看 的所有大于 的正因数。
这个集合一定不是空的,因为 自己就在里面。
取其中最小的一个,记作 。
我们说明 一定是素数。
题目:设 是素数,若 ,证明 或 。
这条性质的意思是:素数如果能整除一个乘积,就一定能整除其中至少一个因子。
我们分情况想。
如果 ,结论已经成立。
下面只需要考虑 的情况。
因为 是素数,而 又不整除 ,所以 和 没有大于 的公因数。
练习一:判断 是否为素数。若是合数,写出它的素因数分解。
先算上界:
所以只需要试:
练习二:用埃拉托色尼筛法找出 到 之间所有的素数,并验证相邻素数之差均不超过 。
以内的素数是:
相邻差值分别是:
练习三:证明:若 是素数且 ,则 。
因为:
又因为 ,由例题五的性质可知:
这一节我们认识了素数和合数。
素数就是只能被 和自己整除的大于 的正整数。
合数则可以继续拆成更小的因数。
既不是素数,也不是合数,因为它只有一个正因数。
判断素数时,可以用试除法,只需要试到 。
如果要找一段范围内的所有素数,可以用埃拉托色尼筛法。
算术基本定理告诉我们:每个大于 的正整数,都能唯一分解成素数的乘积。
欧几里得证明了素数有无穷多个。
虽然素数越往后越稀疏,但它们永远不会消失。这也是素数最迷人的地方:定义很简单,故事却很长。
其中 是不同的素数, 是正整数。
逐一检查。
是奇数,所以不能被 整除。
各位数字和是:
不能被 整除,所以 不能被 整除。
个位是 ,所以不能被 整除。
再试 ,不能整除。
最后试 :
能整除。
所以:
能被拆开,因此它是合数,不是素数。
所以:
继续分解 。
所以:
合并起来:
验算:
所以分解正确。
保留 ,划掉 的倍数:
保留 ,划掉还没被划掉的 的倍数:
保留 ,从 开始划掉 的倍数。
再保留 ,划掉 。
最后留下的数就是:
所以 以内共有 个素数。
如果 不是素数,那它还能继续拆开。
也就是说,存在一个因数 ,满足:
并且 。
因为 ,又因为 ,所以 。
这样 也是 的一个大于 的正因数。
但 ,这和 是最小的那个矛盾。
所以 只能是素数。
因此, 至少有一个素因子。
也就是说:
根据裴蜀定理,存在整数 ,使得:
两边同时乘以 :
因为 ,并且题目给了 ,所以 。
因此 能整除左边,也就能整除右边的 。
所以 。
综上,如果 ,那么 或 。
不是偶数,不能被 整除。
数字和是:
所以不能被 整除。
个位是 ,所以不能被 整除。
再试:
不能整除。
也不能整除。
最后:
所以:
是合数。
最大差值是 ,所以都没有超过 。
所以存在整数 ,使得:
两边平方:
因此: