编程语言
首页 > 编程语言> > Python向左,数学向右:梅森素数

Python向左,数学向右:梅森素数

作者:互联网


薛定谔的猫


       暮色苍茫,一辆双门版的福特雷鸟在杰姆斯山的森林公路上飞驰,车灯照亮了道路两侧的云杉树。作为对我协助绘制乌拉姆素数分布图的回报,乌拉姆今晚开车载我去城里的酒吧小酌。

       “我说,你是怎么做到的,想变人变人,想变猫变猫?”乌拉姆一手把着方向盘,一手关上了收音机,用眼睛的余光扫了一眼坐在副驾座椅上的我——一个白净的亚裔青年。

       “万物有灵,不是吗?宇宙中的每一个生命个体,都有其存在的形式,或是一株草,或是一只鸟——这不是重点,重点是生命个体有多种存在形式。在我们留意到某个生命个体之前,它的存在形式是不确定的,而当我们观察它的时候,它一定是以某种确定的形式出现的。薛老师不是说过嘛,粒子的状态是多个波函数的叠加,在被观测前,粒子的状态是不确定的,一旦被观测到,粒子的状态将被确定为多个波函数中的某一个。”

       “这就是我想不明白的地方:你究竟是如何做到在人们看你的那一瞬间选择你期望的那个波函数的呢?我上一眼看你的时候,你还是一只猫,转瞬间就变成了人。”

       我微微一笑:“这是秘密。”

       “那我究竟该如何与你相处呢?比方说,我该称呼你什么?”

       “事实上,我不止帮薛老师做过实验,还在北大当过旁听生,在中科大听过院士的讲座。此外,我还和夏目漱石、村上春树合作写过小说,给毕加索做过模特,陪海明威喝过咖啡。人们给我取了各种各样的名字,而全世界的小朋友都喜欢叫我Tom。就叫我汤姆吧。”


HelloWorld酒吧


       乌拉姆将车稳稳地停在了圣达菲广场对面的HelloWorld酒吧门前。别看这是一台1956年出厂的破车,配备的可是202马力的V8发动机,从杰姆斯山中的阿拉莫斯国家试验室跑到新墨西哥首府圣达菲市中心,只用了二十五分钟。

       夜幕笼罩下的圣达菲广场霓虹闪烁,幽暗的角落里不时走出形形色色的印第安人、墨西哥人,或者拉美裔的新移民。走进HelloWorld酒吧,一束单薄的灯光透过似有似无的烟雾打在一个头发蓬乱、满脸胡须、面色有些苍白的男人侧脸,而另一面脸颊被他深深的藏在黑暗里。吉他手低头抱着吉他弹唱着约翰·丹佛的《Contry road take me home》,随后有稀稀落落的掌声响起。

在这里插入图片描述

HelloWorld酒吧

       选了一个相对安静的角落入座之后,乌拉姆要了一杯马丁尼,我点了一杯雪利酒。额外多付的两美元小费激发了女招待的工作热情,不但嘘寒问暖,还向乌拉姆献上了一个飞吻。

       “老相识?”我冲身材火辣的美女背影努努嘴。

       “我上次来这里,还是两年前陪着霍尔维茨来的。这两年侍应生估计都换过八遍了,我怎么可能认识她?”

       “加州大学洛杉矶分校的霍尔维茨? M 4253 M_{4253} M4253​和 M 4423 M_{4423} M4423​的发现者?”

       “对,就是他。一天之内发现了两个梅森素数,的确是一件值得骄傲的事情。这家伙高兴得快要疯了,从洛杉矶跑过来请我喝酒。”

       所谓的梅森素数,就是可以写成 2 n − 1 2^n-1 2n−1的素数,比如2、3、5、7都是梅森素数,而第5个梅森素数则是 2 13 − 1 = 8191 2^{13}-1=8191 213−1=8191,即 M 13 M_{13} M13​。虽然提出了梅森素数的概念,梅森本人其实只发现了 M 17 M_{17} M17​和 M 19 M_{19} M19​两个梅森素数。

       乌拉姆端起酒杯,向我微微示意:“你也认识霍尔维茨?”

       “不,我不认识他。不过,我一直在搜集梅森素数的最新消息,所以知道他。我还知道,今年(此处指1963年)夏天五、六月间,加拿大数学家吉利斯连续发现了 M 9689 M_{9689} M9689​、 M 9941 M_{9941} M9941​和 M 11213 M_{11213} M11213​三个梅森素数。至此,全世界的数学家总共发现了23个梅森素数。”

       实际上,我不能告诉乌拉姆的是,截至2018年,人类已经发现了51个梅森素数,最新发现的是 M 82589933 M_{82589933} M82589933​,写出来大约有24862048位。

       "你也在挖矿?"乌拉姆的眼睛里闪过一丝狐疑。

       “挖矿?挖什么矿?”

       “哦哦,没什么。既然你不知道,那还是不知道的好。那也许只是一个传说而已。”

       谈话戛然而止,我嗅到了一丝诡异。我和乌拉姆几乎是同时端起了酒杯,吉他手开始弹唱丹·吉布森的《I cant stop loving you》。

       “你可以开个条件,乌拉姆。我很想知道那个传说,这对我来说这很重要。”沉默了一会儿,我重新发起对话。

       乌拉姆笑了:“老规矩:你要是能回答我一个小问题,我就告诉你,否则免谈。”

       和乌拉姆这样的人相处久了,就会适应他们这种看似幼稚实则进退自如的处事方式。见我点头同意,乌拉姆从口袋里掏出五枚一美分的硬币,分给我两枚,自己手里握着三枚。

       “假如我们同时抛出手中的硬币,我的林肯比你多的概率是多少?”

       一美分硬币正面是林肯总统的头像,乌拉姆问的是正面朝上的硬币比我多的概率。堂堂一个数学家,居然用概率的问题为难一只猫,真是个可恶的家伙。

       当然,如果给我足够多的时间,也许我可以用数学的方式回答这个问题,不过情急之下,只能先用计算机的方式来解决了。幸好,我有Python可用。

>>> k = 0
>>> for i in range(32):
		s = bin(i)[2:].zfill(5)
		ulams, tom = s[:3].count('1'), s[3:].count('1')
		if ulams > tom:
			k += 1

		
>>> k
16

       “哈哈,我算出来了。你的林肯比我多的概率是50%,没错吧?”

       “先给我说说你这天书一样的代码是什么意思吧。”乌拉姆盯着屏幕说。

       “你看,这里的变量k用于记录你的林肯比我多的次数。五枚硬币抛出来共有32种不同的组合,我用for循环逐一遍历:每个数字用bin()变成二进制字符串,1代表硬币正面朝上, 0代表反面朝上;若二进制位数不足五位,则用字符串对象的zfill()方法从左侧补0至五位;二进制字符串的高三位视为你抛出的硬币,低两位视为我抛出的硬币;count()分别计算其中1的数量,如果你比我多,k就加1。就这么简单。”

       “答案倒是正确,只是方法太笨了。你的两枚硬币和我的两枚硬币,正面朝上的概率相等,决定结果的是我的第三枚硬币,第三枚硬币正面朝上的概率当然就是50%啦。不过,你的方法倒是特别适合解决我比你多更多硬币的情况。”

       “对呀,我怎么没想到呢!”我拍了一下自己的脑袋,“应该先好好想一想的,不能总是依赖于Python工具。”

       “智商不够,电脑来凑。勉强算你答对了吧。”乌拉姆故意摆出一副居高临下的施舍姿态,端起酒杯一饮而尽。

       “你这话要是搁在几十年后说,我敢打赌,单是CSDN的程序员就能把你打死一百遍。”没有更好的方式回击乌拉姆的嘲讽,我只好催促他:“既然算我答对了,那就快讲讲挖矿的传说吧。”


梅森计划


       “刚才你说一直在搜集梅森素数的情报,那对梅森这个人一定也非常了解吧?”乌拉姆端起酒杯啜了一小口,悠悠地说。

       “是的。”

       巴黎大革命前我一直待在法国,直到数学天才伽罗瓦因决斗而死,才去了大清帝国,我当然了解梅森的生平。梅森(Marin Mersenne, 1588-1648)是17世纪的法国乃至欧洲科学界一位独特的中心人物,类似于江湖上的总瓢把子。

       当时的欧洲,还没有正规的学术期刊或机构,科学交流只能靠写信或面谈。尽管梅森本人的数学造诣并不高,留给世人的大概只有梅森素数,但作为一名神职人员,他对哲学与科学的兴趣非常浓厚,又喜欢社交活动,因此许多数学家都乐意将研究成果寄给梅森,再由他转告给更多人。梅森也会经常在自己的住处举办沙龙,召集大家聚会交流。

       久而久之,这样的民间自发科学组织逐渐形成规模,被欧洲科学界称为“梅森学院”、“有定期学术刊物之前的科学信息交换站”。最终,梅森学院演变成为了巴黎皇家科学院。由此可见,梅森和他的梅森学院在法国早期数学乃至整个科学的发展和交流中起到了至关重要的作用。

       “正如你所知道的那样,法国数学之所以能够在其后两百年内长盛不衰,梅森是幕后的英雄,而当时的法国国王路易十四则是另一个不可或缺的人物。这位雄心勃勃的君主深知科技强国的道理,以大把撒钱的方式迅速聚集了一大批欧洲顶级的科学家,之后在梅森学院的基础上建立了巴黎皇家科学院,把科学研究当成是国家运作正式的一部分。”

       路易十四和大清帝国康熙大帝的执政期几乎完全重合,我只知道康熙平定三藩开疆拓土,却不知道路易十四的科技强国。

       “哦,你说的路易十四科技强国,我倒是第一次听说。可是,这个和挖矿有什么关系呢?”

       “别着急,听我慢慢道来。”乌拉姆再次端起酒杯,向我示意。

       “据说,梅森在去世前给路易十四写了一封密信,请求设立一个秘密基金会,为每一个梅森素数的发现者提供 2 t 2^t 2t个金币作为奖励,其中t为距离发现上个梅森素数的时间间隔,以十年为单位,仅计整数。比如,第7个梅森素数 M 19 M_{19} M19​是梅森于1644年发现的,第8个梅森素数 M 31 M_{31} M31​是由欧拉在1772年发现的,中间隔了128年,根据规则,欧拉应该得到 2 12 2^{12} 212即4096个金币。”

       "天哪!"我不禁笑出声来,“这不是那个国际象棋棋盘上放米粒的故事翻版吗?这样的故事你也能相信?如果是真的,梅森又何必提意设立秘密基金呢?又不是见不得人的勾当。”

       “这件事情,并不是你想的那么简单。有证据表明,路易十四最终——也许就在创立巴黎皇家科学院的1666年,批准了梅森的请求——我们姑且称之为梅森计划吧,尽管那时梅森已经去世多年。”乌拉姆并没有直接回应我的质疑,继续按照自己的节奏讲述。

       “设立秘密而非公开的基金,也许是法国国王的主意。毕竟那时的法国正处于高速扩张时器,处处需要数学家和科学家,公开鼓励大家寻找梅森素数,会牵制数学家和科学家在其他领域的研究。只是,国王没想到这个计划最终还是在一个小圈子里传开了。后来有传言说,有人招募算工从事寻找梅森素数的计算工作,并将这个工作称为挖矿,算工变成了矿工。”

       大航海时代,航海家们需要计算船舶位置和航线,天文学家需要计算天体运行的轨道,商人需要计算驴打滚式的复利。随着计算需求的激增,这一时期出现了专门从事计算的人——开始被称为计算师,后来变成了算工。

       “这么说来,倒也合乎逻辑。”我沉思了一会儿,“难怪在欧拉发现第8个梅森素数之前的一百年期间,整个欧洲的算工资源突然奇缺,以至于英法各国的航海船只不得不多花数倍的工资招募算工。历史悠久的霍格沃茨学院还因为这个原因增建了计算学院,邓布利多亲任院长,为欧洲培养了数以万计的优秀算工。”

“只可惜,所有矿工们的努力都白费了,最终天才欧拉获得了应得的奖赏。不过,欧拉从未公开承认获得过这笔巨奖,也许是受保密协议约束吧。”

       乌拉姆回身向吧台的女招待亮了亮空杯,又要了一杯白兰地,我则改换了黑啤酒。女招待送酒过来的时候,顺手递给我一张名片,笑靥如花。

       “帅哥,这是我公寓的电话。周日可以请我看电影吗?”

       “荣幸之至。我叫汤姆,会给你打电话的。”

       等美女转身离开,我把名片扔给了乌拉姆:“她一定是想骗我的电脑,或者骗我教她Python,我才不会上当呢。”

       “你不仅智商有问题,情商也堪忧啊。”乌拉姆笑着拿起名片,读出了名片上的名字:“爱丽丝·纳皮尔(Alice Napier)。”

       “爱丽丝·纳皮尔?”听到这个名字,就像被雷电击中一样,我惊叫一声,再也说不出话来。

标签:算工,梅森,硬币,Python,素数,挖矿,拉姆
来源: https://blog.csdn.net/xufive/article/details/116204517