首页 资讯 农业 汽车 房产 科技 养老 教育 展会 自媒体
智能 互联网 摄影 手机 VR

圆周率里有每个人银行卡密码和生日?程序员操作亮了

来源:未知 作者:Selina 人气: 发布时间:2018-03-15

3月14日,这也是一个特殊的节日,是国际数学家联盟设立的国际数学日,也叫圆周率日、或者π日。原因很简单,π约等于3.14嘛!

  圆周率的概念,在人类文明史上由来已久。一块产于公元前1900年到1600年前的巴比伦石匾上,记载着圆周率= 25/8 = 3.125;古埃及文物,莱因德数学纸草书(Rhind Mathematical Papyrus)则记载圆周率等于16/9的平方,约等于3.1605。在中国,早在周朝成书的《周髀算经》中,就曾经有过“周三径一”的表述。

▲图片来源:视觉中国▲图片来源:视觉中国

  有人好奇,既然圆周率是无限不循环小数,会不会包括这个世界上的任何信息,包含了这个世界?

  能否包含“任何信息”不好说,但一个冷知识是,圆周率里有每个人的银行卡密码!不信?看看这位来自知乎的程序员朋友是怎么证明的。

  以下内容来自知乎用户vortex的回答:

  (每经小编注:略有删节,点击文末阅读原文可跳转知乎查看原答案)

  这个问题挺有意思,非数学专业,就从计算机的角度分析一下这个问题吧。

  为了分析这个问题,我先用y-cruncher跑出了π的前10亿位,感觉应该够用!

  不够用也没办法了,内存有限,而且跑程序时CPU占用率100%,风扇吹的我心慌。

▲让人无奈的占用率▲让人无奈的占用率

  计算前10亿位共用时190.515秒,数据以txt的格式保存,大小976.563MB。

  下面开始我们的分析工作。

  先简单的搜索一下,发现自己能想到的几个六位数字都出现了(包括我的银行卡密码)

  举几个例子:

▲000000出现在小数点后第1,699,927位▲000000出现在小数点后第1,699,927位
▲111111出现在小数点后第255,945位▲111111出现在小数点后第255,945位
▲222222出现在小数点后第963,024位▲222222出现在小数点后第963,024位
▲123456出现在小数点后第2,458,885位▲123456出现在小数点后第2,458,885位

  注:每行有1024个字符,所以计算公式应为1024*(行数-1)+列数-2,其中2为开头的“3.”

  但是不可能手动把000000~999999全验证一遍吧(虽然我今天很闲),还是要写个程序跑一下。

  不考虑复杂度问题的话,代码很快就写完了,只有短短的14行。

  因为我用的是index,如果密码不存在的话,则会直接抛出异常。但是我的直觉是000000~999999是都存在的(其实是我懒得多写代码了)

  检索的速度大概是1000条/秒,接下来就是耐心的等待过程。

  程序跑完了!不出所料,所有的六位银行卡密码在π中都是存在的。

  最后出现的密码是569540,位于小数点后14,118,307位。(10亿位有点过剩啊!)

▲统计数据截图▲统计数据截图

  虽然π是无限不循环的,但是对我来说只截止到小数点后7,599,477位。

  第一次收到这么多的赞。

  于是我又写了个程序把π前10亿位中的生日给跑了出来,生日的范围为1920~2020共计101年。

  上代码~供有兴趣的朋友研究,可以一起讨论如何计算的更快。(感觉这个完全可以出一个面试题的!我水平是不太行,下面是我想到的方法。)

  大家不要私信给我发银行卡密码了!很危险的!真要查的话,有个朋友分享了在线查询的链接。范围精确到2亿位。

  下面的内容非程序员可忽略...

  经评论区的朋友们启发,而且实在受不了别人喷我程序运行的慢了。又写了一个更快的检索6位数字(就是所谓的银行卡密码)的算法。

  感兴趣的程序员可以看一下。我感觉速度还行。十几秒钟就能检索完毕。更快的我暂时也还没想到……毕竟答主还只是一个大二在校生,也没搞过ACM竞赛,水平有限。

  为程序员的智慧点赞!





免责声明:本文仅代表作者个人观点,与华纳网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
责任编辑:Selina
地址: 辽宁省大连市中山区港湾街20号名仕财富中心B座1517室 联系电话: 0411-84950851
© 2017 大连华纳文化传媒有限公司 All rights reserved
经营许可证编号:辽B2-20170212 备案号:辽ICP备17007383号-2
辽公网安备 21021102000241