2021年终于到来,按照笔者中学时参加数学竞赛的惯例,总要分析一下2021这个数字的性质,以防竞赛中遇上包含这一数字的题目。然而,跟2020比起来,2021实在是一个平平无奇的数字。2020有许多有趣的分拆,比如它是5个404的和。2020=1024+996,所以2020年10月24日码农节有着特殊的意义。2021呢,笔者尚未找到这样的分拆,难道要用2021=1024+997?那可就太绝望了!
如果一个大于1的整数,它的因子只有1和它本身,那么这个数就被称为素数。2、3、5、7是最小的几个素数,1997也是素数。素数是“数论”这门数学分支里研究的基本对象,在数学里有着重要意义。如果2021是一个素数,那么从数学上看它就很有意思。可是很遗憾,2021不是素数。2021=43×47,43和47都是素数。如果一个正整数是两个(可以相同)素数的乘积,那么这个正整数就被称为半素数。
所以2021就是一个“半素数”。
在数论里有许多跟素数有关的问题。比如著名的哥德巴赫猜想,其内容就是任何一个大于4的偶数都能写成两个素数的和。如果两个素数彼此之间只差2,那么它们就被称为一对孪生素数。比如1997和1999就是一对孪生素数。孪生素数猜想断言存在无穷多对孪生素数。
半素数的一个性质是,如果把它写成两个大于1的整数的乘积,那么在不考虑顺序的情况下,这种乘式是唯一的。1974年,人们用阿雷西博射电望远镜向武仙座M13球状星团发射了一段共1679比特的信息。破解阿雷西博信息的第一步,就是注意到1679是一个半素数,所以可以把信息组成一个73×23的矩形。
2021本身的两个素因子是43和47,如果你是笔者这样的业余数论爱好者,多半可以一眼认出,它们是欧拉发现的一系列能用多项式生成的素数中的两个。欧拉在1772年注意到,对于二次多项式,当n取0, 1, 2, 3, ……, 39时,得到的数值是41, 43, 47, 53, ……, 1601,全部是素数。这个事实可以用下面的乌拉姆螺旋来直观地表示。
从41开始,把自然数按照逆时针螺旋形写在方格纸上,然后标出其中所有的素数。我们会发现,包含41的右上至左下的对角线上连续排列着很多个素数。
用计算机很容易算出,要一直到n=420,我们才会得到第一个既不是素数又不是半素数的P(n):而在从n=0到n=419的总共420个P(n)中,有281个素数,139个半素数。1857年,俄国数学家布尼亚科夫斯基猜测,存在无穷多个正整数n,使得P(n)是素数。这个猜想至今尚未得到证明。1978年,波兰数学家伊万尼克证明了,存在无穷多个正整数n,使得P(n)是素数或者半素数。
那么,为什么数学家们要研究素数或者半素数呢?它们跟我们的生活有什么关系?答案是,它们确实跟我们的生活有着密切关系。我们今天能够开通网上银行被巨头割韭菜,进行网络购物双十一剁手,甚至上网浏览,都要感谢素数和半素数。究其原因,是利用了如下的性质:把两个数相乘很容易,把一个数分解成乘积则很难。
我们可以看看2021这个例子。如果要计算43×47,小学三四年级的学生就能轻松算出结果是2021。
但如果不知道其中任何一个因子,要想找出来2021是哪两个数的乘积就不那么容易。另外一个著名的例子是分解。1903年,美国数学家科尔曾经在美国数学会的会议上作过一次无言的“演讲”。他沉默地走上讲台,用粉笔在黑板上算出,然后他继续计算,得到的结果跟前面一样。他的无言演讲赢得了全场的起立鼓掌。有人问他是怎样找到这一分解的,他说:“三年中的全部星期天。”
今天,用一台普通的计算机就能轻易分解2021或者,但如果数字更大,分解仍然十分困难。比如我们拿两个300位以上的素数相乘,用普通计算机可以迅速算出结果。但如果只给你这个乘积的结果,在不知道任何一个因子的情况下,即便是使用超级计算机也需要很多年才可以分解出来。大数分解的这一特性被密码学家用来设计公钥密码。
在公钥密码里,每个用户被分配了两套密钥,一套加密密钥,一套解密密钥。其中加密密钥公开给所有人,解密密钥则只有这个用户本人才知道。如果张三要给李四发送信息,他只需要使用李四的加密密钥来对原始信息加密,把加密信息发送给李四。那么就只有李四本人才能够用李四的解密密钥来对加密信息解密。
用公钥密码还可以实现数字签名。
比如张三给李四发送一段信息,他可以先用张三自己的解密密钥来处理原始信息,得到一号加密信息,然后再用李四的加密密钥来对一号加密信息加密,得到二号加密信息。实际发送给李四的是二号加密信息。李四收到二号加密信息后,需要先用自己的解密密钥来解密二号加密信息,得到一号加密信息,然后再用张三的加密密钥来处理一下,就得到原始信息。这样发送出来的二号加密信息,就是只有张三才能发送,并且只有李四才能解读的。
1977年,三位麻省理工学院的密码学家Ronald Rivest, Adi Shamir, 和Leonard Adleman提出了RSA公钥密码,利用大数分解的困难来实现公钥密码。具体而言,每个用户被分配了两个大素数。这两个大素数的乘积(即一个“半素数”)被公开给了所有用户,但只有这个用户本身才知道是哪两个素数。解密密钥需要知道这两个素数,而加密密钥只需要使用它们的乘积。
在RSA公钥密码里,只要使用的两个素数足够大,就可以保证密码是安全的。在网络时代,公钥密码被广泛应用于网络银行、电子商务等场景中。读者可能会注意到,以前上网,浏览器里的地址多半是以http://开头,但近年来多半是以https://开头。在https协议里就使用了公钥密码,比http协议更安全。
然而,在1994年,Peter Shor提出了一个用量子计算机快速进行大数分解的Shor算法。
一旦可实用的量子计算机被建成,RSA公钥密码将不再安全。如何设计更安全的密码,以及如何破译已有的密码,始终是密码学家不懈研究的问题,而数论在其中发挥着不可代替的作用。当然了,RSA用到的半素数都是有数百位甚至上千位的大数,不会用到2021这么小的数。我们的年份2021,仍然只是一个平平无奇的数字。希望2021年,也像这个数字一样平平无奇,而不像2020年那样惊心动魄。