最近在重读经典科普读物王树禾先生的《数学聊斋》,看到亲和数的内容时,我在思考欧拉当年公布了震惊数学界的60对亲和数所用的初等算法是什么?我检索浏览了知网上几乎全部关于亲和数的论文,大多都是研究亲和数历史,亲和数性质,借助计算机研究亲和数等文章,学习后却不能知全貌,我又翻看了几本著作,例如俞晓群著的《自然数中的明珠》,因为是科普读物,只是概括介绍了欧拉方法,我也只能管中窥豹,可见一斑。在检索了欧拉全集后,下载了欧拉关于亲和数的几篇古老文章,发现其实欧拉当年公布之初也并没有解释具体的算法。但根据我后来下载到的几篇在国外高引的亲和数相关文章指出,其在E100,E152,E798的文章中指出了算法,在学习了相关内容以后,除了惊叹欧拉无与伦比的计算力和天才想法,还酝酿了写一篇关于探寻欧拉亲和数算法的文章。因为我在微信搜索栏里输入亲和数,数以万计的文章,视频,却很少有人关注算法,大多是一些科普类的文章或者亲和数的程序等等,涉及到算法的文章往往都有纰漏,不系统不全面。5年前我公众号写了一篇嫌疑人“641”的献身——由费马数猜想谈欧拉的直觉,揣测欧拉当年是如何用直觉发现641整除于费马数F5,即2的32次方,最近我翻看欧拉全集过程中发现这篇文章中有部分涉及数学史的内容并不准确,还需要修正。本人水平有限,这篇文章雏形思路也很混乱,但又想先把近半月的收获记录下来,数学史整理真的很困难,有时候要通读资料,没说一句话都怕有疏漏,前不久看到一个博主的观点我很支持,他说数学历史的资料分为三类,一是科普书籍,这是三手资料,二是专业论文,这是二手资料,三是历史文献、原文或译文,这是一手资料,这篇文章我参阅了这三类资料,但预想到依旧会有纰漏甚至错误,期待指正。
一、 亲和数的历史
据说毕达哥拉斯曾说:“朋友是你灵魂的倩影,要像220与284一样亲密”,这是世界上公认的第一对亲和数,是古希腊著名的毕达哥拉斯学派于公元前五世纪左右发现的。
亲和数的定义是对于自然数m和n,若除了m本身以外m的所有真因数之和等于n,除了n本身以外n的所有真因数之和为m,则m和n是一对亲和数。
例如:220的所有真因数之和为
1+2+4+5+10+11+20+22+44+55+110=284,
而284的所有真因数之和为
1+2+4+71+142=220。所以220和284是一对亲和数。
除了他们本身,220的因子总和是284,284的因子总和是220。
你可能会惊叹,这真是一组奇妙的数字,你中有我,我中有你,宛如一对恋人。
1747年,欧拉(Leonhard Euler,1707-1783)一下公布了30对亲和数,3年后,他给出了部分计算过程并增加到64对(包含已经发现的三对,其中有2对出错)。欧拉的发现让人拍案叫绝,这不仅仅是他对新方法的追求,更展现了他无与伦比的计算天赋。
欧拉说,我有一个公式,就是下面这个样子,验证一下,就发现了60对亲和数
人们以为在一定大小范围内,亲和数已经被数学家遍地三尺,不会再有意外。然后历史总有意外,1867年,年仅16岁的意大利中学生Paganini发现一对非常小的亲和数1184和1210,这是人类按时间顺序发现的第66对亲和数,也是最戏剧性的一个。随后分别有人在1864年和1911年又各自发现2对,一共发现70对亲和数。
1946年,计算机的产生给亲和数寻找带来了新的突破。例如20世纪60年代,美国耶鲁大学的计算机IBM7094对所有的100万以内的数进行了清查,共找到42对亲和数(包含一些新的亲和数)。到20世纪70年代,已经找到1200多对亲和数,还有人找到数位152位的亲和数对。当然随着亲和数的寻找,数位也越来越大, 90亿以下的亲和数只有1360对,截止2004年3月25日,人们就发现了6262871对亲和数。根据亲和数的一个统计网站:
https://sech.me/ap/index.html的数据,截止2024年10月31号,人们一共发现了1229393082对亲和数,随着计算机算法的不断运行,可能在高峰每天都可以找到数千对数万对,亲和数不再稀缺,但算法不会停止,就像对梅森素数的寻找一样,向未知发起挑战。
二、欧拉的成果
在欧拉1747年发表的论文中(即前问提到的E100),他指出按照费马和笛卡尔的方法几乎找不到更多的亲和数,他一次公布了30对亲和数,但他并没有公布了算法。下面是文章英文版内容,如此繁杂的计算,超凡的技巧,他却寥寥几笔,写了这篇文章。
三年后,欧拉又发表论文,即前文说到的E152,这也是几篇文章中最重要的一篇,他一共公布了61对亲和数,但不知道什么原因他删除了第一次给出的第VIII,IX和XIII对(第8,9,13对),其中第VIII,IX对亲和数是对的,第XIII对是错的。原文给出的如下图:
为了后续表达更加清晰,笔者选用俞晓群著的《自然数中的明珠》中的表格,他把第VIII、IX、XIII对亲和数记作α、β、γ补在了欧拉给出的61对亲和数之后,书中的表格如下表(表中第4对,第6对、第16对、第37对、第51对印刷有误,上文中的图片中是正确的):
三、 探寻欧拉的足迹
我试图还原欧拉的计算过程,对表中的很多数对进行了运算,很多数对计算极为复杂,我还大量借用了计算器,让人不得不惊叹欧拉的天才计算能力。为了展示精妙的算法,我选取了其中几组数字较小的亲和数对(包含毕达哥拉斯、笛卡尔和费马的前三组),适当了修改了算法,让某些计算看起来简单一些。
上面给出的三对亲和数中,尤其是第3对的计算已经非常繁琐了,还涉及到素数的验证,所以欧拉才会在前文中提到的E100论文中说笛卡尔尽管在哲学和数学方面有重要的成果和思考,但依旧在寻找亲和数上花费了不少的精力。
即寻找上面三个数均为素数的情形,上面我推导的这个公式实际上公元9世纪一位阿拉伯学者塔比·伊本·库拉给出的一个亲和数公式的推广形式,因为计算力的原因,这很难寻找到,所以费马和笛卡尔给出的第2对和第3对是人力计算的极限了,需要探究其他形式的亲和数.
这也是上面表格中的α、β对,这两对数值也特别小,是欧拉第一次给出的30对中的第8和第9对,不知道什么原因,他删除掉了.
上面是我修改的算法,简单易懂,但很难一般化,欧拉给出算法是:
这里之所以举例a为256的情况是想说明即便是在这么程序化,精妙的算法下,想要计算出最终结果的计算量依据是超量的,仅仅这一个的运算几乎花掉我一天时间.
同理,取(α,β)为(1,2),(2,3),(1,4)(3,4)等等,找到相应的k值,可以找到表中16~ 28对亲和数.
上面这一对亲和数即为表格中的第51对亲和数。事实上表中剩余绝大多数数对都可以通过这种方法找到,但运算量大,欧拉为了简化,又给出了另一种形式,即形如zap和zbq的亲和数对(其中只要求p,q是不整除z的素数),然后尝试给定a,b值,进行简化运算.由于文章篇幅问题,不再赘述。
四、 无尽的追求
大家可以看出,上面的算法运算还是非常大的,也许一对亲和数的运算就要耗掉数小时,如果赋值的不恰当,数字过大,甚至可能需要数天,难以想象欧拉在一次次修正改进算法的同时,是如何运算并给出60对亲和数,这只是欧拉一生成就的沧海一粟,对于他分析大师,新领域开拓的成就来说甚至不值一提。可即便是这样的天才数学家,也有疏漏,前文提到1867年16岁的意大利中学生Paganini发现一对非常小的亲和数1184和1210,如果我们对它质因数分解,就会发现欧拉的算法是算不出这一对亲和数的。上面的算法都是初等方法,只是变形的技巧巧夺天工,但关于亲和数的问题不仅仅在于寻找,亲和数有很多好的性质,也有很多好的猜想,例如:当亲和数越大,两个数的比值越接近1;亲和数对要么同奇要么同偶,有没有一奇一偶;亲和数有无穷多对吗?甚至有人推广了链亲和数,即除自己以为的因数和循环相等,形成一个链条,这又是一个衍生出来的其他问题,也有很多好的性质和有趣的历史。
只是,亲和数的寻找方法,人们换了一种方法,一种程序化一遍遍验算的方法,不再需要敏锐的观察和对数的直觉。前文提到的网址:
https://sech.me/ap/index.html,实时在更新人类发现的亲和数总数以及亲和数有关的文章,新闻等等,而且给出了程序接口链接:
https://sech.me/bolinc/Amicable,如果您的电脑高配并且处理器经常闲置,也可以参与寻找,网站还给出寻找亲和数个数的排行榜,如下图:
参考文献
[1] Leonhard Euler and Jonathan David Evans. 2024.
On Amicable Numbers. arXiv preprint arXiv:2409.08783.
[2]俞晓群.自然数中的明珠[M].上海:上海教育出版社,2013,35-52.
[3]Euler,L.(2015).Correspondence of Leonhard Euler with
ChristianGoldbach:Volume1(M.Mattmuller&F.Lemmermeyer, Eds.;1st ed.).Springer,592,
https://doi.org/10.1007/978-3-0348-0893-4
[4]孙宏安.亲和数[J].中学数学教学参考,2007,(05):60-61.
[5]徐品方.寻找亲和数的艰辛岁月[J].数学通报,1999,(06):39-40+32.
[6]潘承洞,潘承彪.初等数论(第二版)[M].北京:北京大学出版社,2003,110.
[7]王树和.数学聊斋[M].北京:科学出版社,2008,7-8.
[8]周明儒.从欧拉的数学直觉谈起[M].北京:高等教育出版社,2009.
[9]周尚超,王森,徐保根,等.亲和数[J].华东交通大学学报,1998,(04):69-70+82.
微信号 : Epai0i1