撰文
倪忆(加州理工学院数学系教授)
来源:普林小虎队
跌宕起伏的年终于过去,年来到人间。按照笔者中学时参加数学竞赛的惯例,总要分析一下这个数字的性质,以防竞赛中遇上包含这一数字的题目。像年国际数学奥林匹克,第四题里就出现了。
年IMO第四题,有兴趣的读者可以做做。
然而,跟比起来,实在是一个平平无奇的数字。
有许多有趣的分拆,比如它是5个的和。(有位读者问:“啥意思?”这个嘛,大家应该都经常看到页面是不是?)
=+,所以年10月24日码农节有着特殊的意义。
呢,笔者尚未找到这样的分拆,难道要用=+?那可就太绝望了!
素数和半素数
分拆不成,那么试着因数分解?我们知道,如果一个大于1的整数的因子只有1和它本身,那么这个数就被称为素数(也称质数)。2、3、5、7是最小的几个素数,也是素数。素数是“数论”这门数学分支里研究的基本对象,在数学里有着重要意义。如果是一个素数,那么从数学上看它就很有意思。可是很遗憾,
所以它不是素数。在上面的乘式里,43和47都是素数。如果一个正整数是两个(可以相同)素数的乘积,那么这个正整数就被称为半素数(semiprime)。所以就是一个“半素数”。在数论里有许多跟素数有关的问题。比如著名的哥德巴赫猜想,其内容就是任何一个大于4的偶数都能写成两个素数的和。如果两个素数彼此之间只差2,那么它们就被称为一对孪生素数。比如和就是一对孪生素数。孪生素数猜想断言存在无穷多对孪生素数。
张益唐在孪生素数猜想上作出了重大突破丨图源:北京大学新闻网
有的时候,数学家无法证明关于素数的猜想,就退而求其次,看看能不能证明关于半素数的相应结论。最著名的例子就是陈景润在哥德巴赫猜想上的工作,通常被记为“1+2”,其数学含义是:任何一个大于4的偶数都能写成两个数的和,其中一个数是素数,另外一个数是素数或者半素数。公众不太了解的是,陈景润在孪生素数猜想上也有类似的结果。他证明了,存在无穷多个素数,使得这个素数加上2以后是一个素数或者半素数。
著名数学家陈景润丨图源:新华网
半素数的一个性质是,如果把它写成两个大于1的整数的乘积,那么在不考虑顺序的情况下,这种乘式是唯一的。(读者可以思考一下,除了半素数以外,还有没有别的整数有这样的性质?)年,人们用阿雷西博射电望远镜向武仙座M13球状星团发射了一段共比特的信息。破解阿雷西博信息的第一步,就是注意到是一个半素数,所以可以把信息组成一个73×23的矩形。
阿雷西博信息中包括1到10的数字,DNA、人类和太阳系的信息,甚至阿雷西博望远镜本身的形象和直径。丨图源:维基百科
乌拉姆螺旋
本身的两个素因子是43和47,如果你是笔者这样的业余数论爱好者,多半可以一眼认出,它们是欧拉(LeonhardEuler)发现的一系列能用多项式生成的素数中的两个。欧拉在年注意到,对于二次多项式
当n取
0,1,2,3,……,39
时,得到的数值是
41,43,47,53,……,,
全部是素数。这个事实可以用下面的乌拉姆螺旋(Ulamspiral)来直观地表示。从41开始,把自然数按照逆时针螺旋形写在方格纸上,然后标出其中所有的素数。我们会发现,包含41的右上至左下的对角线上连续排列着很多个素数。
从41开始的乌拉姆螺旋,其中素数标为蓝色,素数的平方标为绿色。丨图源:Twitter账户FermatsLibrary
注:乌拉姆(StanislawUlam)是一位波兰犹太裔数学家,在纳粹入侵波兰前夕移居美国。他参与了研制原子弹的曼哈顿工程,并在氢弹研制中发挥了关键作用。美英等国的氢弹构型即被命名为泰勒-乌拉姆构型。乌拉姆螺旋是他于一次会议上,听报告过程中闲得无聊,在纸上乱画时发现的。
欧拉的这个二次多项式不可能永远得到素数,但是接下来的很多值仍然是素数或者半素数:
其中P(44)正是我们的年份!用计算机很容易算出,要一直到n=,我们才会得到第一个既不是素数又不是半素数的P(n):
而在从n=0到n=的总共个P(n)中,有个素数,个半素数。年,俄国数学家布尼亚科夫斯基(ViktorBunyakovsky)猜测,存在无穷多个正整数n,使得P(n)是素数。(布尼亚科夫斯基实际上对于更为一般的多项式作出了这个猜想。)这个猜想至今尚未得到证明。年,波兰数学家伊万尼克(HenrykIwaniec)证明了,存在无穷多个正整数n,使得P(n)是素数或者半素数。(伊万尼克对于一般的二次多项式证明了这个结论。)
伊万尼克从特首梁振英手中接过年度邵逸夫数学奖丨图源:邵逸夫奖
RSA公钥密码
那么,为什么数学家们要研究素数或者半素数呢?它们跟我们的生活有什么关系?能吃吗?答案是,它们确实跟我们的生活有着密切关系。我们今天能够开通网上银行被巨头割韭菜,进行网络购物双十一剁手,甚至上网浏览,都要感谢素数和半素数。究其原因,是利用了如下的性质:把两个数相乘很容易,把一个数分解成乘积则很难。我们可以看看这个例子。如果要计算43×47,小学三四年级的学生就能轻松算出结果是。但如果不知道其中任何一个因子,要想找出来是哪两个数的乘积就不那么容易。
另外一个著名的例子是分解
年,美国数学家科尔(FrankNelsonCole)曾经在美国数学会的会议上作过一次无言的“演讲”。他沉默地走上讲台,用粉笔在黑板上算出
然后他继续计算
得到的结果跟前面一样。他的无言演讲赢得了全场的起立鼓掌。有人问他是怎样找到这一分解的,他说:“三年中的全部星期天。”
科尔丨图源:维基百科
实际上,计算
细心的人最多五分钟就能手算出来,——但找到这样的分解却花费了科尔一百多天。(科尔的名字被用于命名美国数学会在数论和代数方面的最高奖,张益唐和许晨阳曾分别获得这两项科尔奖)今天,用一台普通的计算机就能轻易分解或者
但如果数字更大,分解仍然十分困难。比如我们拿两个位以上的素数相乘,用普通计算机可以迅速算出结果。但如果只给你这个乘积的结果,在不知道任何一个因子的情况下,即便是使用超级计算机也需要很多年才可以分解出来。大数分解的这一特性被密码学家用来设计公钥密码。密码在各类影视文学作品里经常出现,比如福尔摩斯探案故事里的跳舞小人。在这个故事里,出现了一个密钥,就是把英文字母一一对应于各种不同形态的跳舞小人。
福尔摩斯和华生在研究跳舞小人密码丨图源:电视剧《神探夏洛克》
在密码传输过程中有两个需要使用密钥的步骤。一个是发送者把正常信息加密为旁人看不懂的信息,另一个是接收者把这段旁人看不懂的信息解密为正常信息。早期人们使用的密码都是对称式密码,加密和解密用的是同一个密钥。如果你知道如何加密,自然就知道如何解密;反过来也是一样,知道如何解密,自然就知道如何加密。
跳舞小人密钥丨图源:一起扣扣网
对称式密码适用于一对一通信,但在多对多通信的情形下就很不方便。比如说张三、李四、王五三个人互相之间用同一密码通信,但有的时候张三想跟李四单独通信,内容不想让王五知道,这时再用以前的同一密码就不合适了,只能另起炉灶采用一套新的密码。这还只是三个人互相通信,要是全球几十亿人互相通信会更麻烦。公钥密码就是为了解决这一问题而设计的。在公钥密码里,每个用户被分配了两套密钥,一套加密密钥,一套解密密钥。其中加密密钥公开给所有人,解密密钥则只有这个用户本人才知道。如果张三要给李四发送信息,他只需要使用李四的加密密钥来对原始信息加密,把加密信息发送给李四。那么就只有李四本人才能够用李四的解密密钥来对加密信息解密。
用公钥密码还可以实现数字签名。比如张三给李四发送一段信息,他可以先用张三自己的解密密钥来处理原始信息,得到一号加密信息,然后再用李四的加密密钥来对一号加密信息加密,得到二号加密信息。实际发送给李四的是二号加密信息。李四收到二号加密信息后,需要先用自己的解密密钥来解密二号加密信息,得到一号加密信息,然后再用张三的加密密钥来处理一下,就得到原始信息。这样发送出来的二号加密信息,就是只有张三才能发送,并且只有李四才能解读的。于是我们便得到了旁人无法仿造的张三的“数字签名”。
公钥密码机制的关键在于,从加密密钥很难推断出解密密钥。年,三位麻省理工学院的密码学家RonaldRivest,AdiShamir,和LeonardAdleman提出了RSA公钥密码,利用大数分解的困难来实现公钥密码。具体而言,每个用户被分配了两个大素数。这两个大素数的乘积(即一个“半素数”)被公开给了所有用户,但只有这个用户本身才知道是哪两个素数。解密密钥需要知道这两个素数,而加密密钥只需要使用它们的乘积。
年,左起Shamir,Rivest,Adleman丨图源:imps.mcmaster.ca
在RSA公钥密码里,只要使用的两个素数足够大,就可以保证密码是安全的。在网络时代,公钥密码被广泛应用于网络银行、电子商务等场景中。读者可能会注意到,以前上网,浏览器里的地址多半是以