如何用反证法证明有无穷多个素数
今天在数据结构和算法分析里第一张看到这个问题,感觉书上写的反证法不够通透,省略了一些思考的步骤。自己也琢磨了半天才完全理解。
补充一下素数的定义:一个大于1的自然数,而且不能被除了1和本身之外的其他自然数整除。
证明步骤如下:
1.假设不存在无穷多个素数,即只有有限个素数,我们把有限个素数中最大的素数设为Pk。
2.既然要证明有无穷多个素数,我们就要证明 1.中的假设错误,即存在大于假设的最大的素数Pk。
3.按照1.中的假设,令P1,P2,P3,...,Pk 是依序排列的所有素数,并令:
N = P1*P2*P3*...*Pk +1;
显然,N > Pk,如果我们能在1.中的假设的前提下证明 N 是一个素数的话,那就能推翻 1.中的假设,从而证明存在无穷多个素数。
下面再利用反证法来证明 N是一个素数。
4.假设N 不是一个素数,即N (N>2)能被 2 ~ N-1 中的某一个整数D整除。因为所有的整数都能用素数的乘积表示,所以按照有穷个素数的假设,P1,P2,P3,...,Pk 中必然有一个或多个是D的因子,我们设其中的一个因子为F。因为如果D能整除N,那么D的因子F也能整除N。然而由N的表达式可以显然易见地知道:F 属于{P1,P2,P3,...,Pk}集合,所以F整除N余1。由此得到在前提假设1.的条件下,假设4.自相矛盾。所以在1.的假设下,N为素数,而且N为大于 Pk的素数。这与1.的假设又相互矛盾,所以1.的假设错误。从而说明存在无穷个素数。
整个证明过程有点绕,但是只要弄清楚各个假设之间的关系就更清楚一些:
在假设1的前提条件下,假设4.得出的结论与假设4.自相矛盾,从而推出与假设4相反的结论,但是与假设4相反的结论与假设1.矛盾,从而推出假设1.为假。
为什么强调假设4.是在假设1.的前提之下,因为假如假设4.不是在假设1.条件之下的话, N = P1*P2*P3*...*Pk + 1 的因子可能有大于Pk的素数因子。从而无法证明假设4自相矛盾。当然,这个问题只是我自己感觉容易混淆的地方。