在Pi中尋找幸運數字

【讀完這篇文章可能須要3.2年】ide

圓周率pi人們都不陌生,那麼這個無限不循環的數字中是否存在一些特殊的數字呢?好比你的QQ號、你女友的生日、你的手機號等等。這個問題沒有太大的意義,也沒有什麼技術含量 ,可是卻頗有意思。測試

在Pi中尋找幸運數字

在MIT的網站是提供了一個小數點後10億位的pi,文件大小大概1GB。(https://stuff.mit.edu/afs/sipb/contrib/pi/pi-billion.txt網站

雖然這不是人類計算的最長的pi,可是已經足夠咱們在其中尋找一些有意思的數字了。url

3.14159265358979323846264338327950288419716939
9375105820974944592307816406286208998628034825
3421170679821480865132823066470938446095505822
3172535940812848111745028410270193852110555964
462294895.........6421977675387131968218819563
5848934815504410194647387557034502943416861599
3243541997318143550603927346434543524276655356
7435702193963945819905483278746713986820931963
53628204612755715171395115275045519【第10億位數字】
【一秒鐘數10位數字,不吃不睡,數到這兒,大概是3.2年以後了】
#可左右滑動

+1s+1s+1s+1s+1s+1s+1s+1s+1s+1s+1scode

好比某人的生日是19901116,那麼若是要在10億位pi中尋找該數字,能夠經過R完成regexp

pi_url = "https://stuff.mit.edu/afs/sipb/contrib/pi/pi-billion.txt"
system(paste0("wget ", pi_url))
library(readr)
my_pi <- read_file("pi-billion.txt")
tt <- gregexpr(pattern ='19901116',my_pi)
tt[[1]]-2 #去掉整數位和小數點
#可左右滑動
[1]   5480651  16906344  20378709  73339152 124427557 160097772 640051361
 [8] 696422030 744245299 794948367 797159618 850405243 920032661 973577551
attr(,"match.length")
 [1] 8 8 8 8 8 8 8 8 8 8 8 8 8 8
attr(,"useBytes")
[1] TRUE
#可左右滑動

即在pi的第5480651位小數開始,第一次出現該生日,在整個10億位小數中一共出現了14次!
上述過程也能夠經過Python完成。blog

import re
ff = open("pi-billion.txt","r")
ff_content = ff.read()
for i in re.finditer("19901116", ff_content):
    print(i.start()-1, i.group())
ff.close()
5480651 19901116
16906344 19901116
20378709 19901116
73339152 19901116
124427557 19901116
160097772 19901116
640051361 19901116
696422030 19901116
744245299 19901116
794948367 19901116
797159618 19901116
850405243 19901116
920032661 19901116
973577551 19901116

結果和R同樣。
理論上,根據機率計算,在10億位數字中出現一個8位數的理論頻數應該爲10,因此這兒出現14次應該是合理的。即每個人的出生年月日都應該可以在pi的10億位小數中找到10次。ip

另外,本人一個還測試了一下本身的一個9位數字的QQ號,理論上出現的頻數應該是1個,結果還真出現了1個,位於pi的第207889022位小數。get

+1s+1s+1s+1s+1s+1s+1s+1sit

在Pi中尋找幸運數字

相關文章
相關標籤/搜索