利用馬青公式輸出π的後任意位數字
阿新 • • 發佈:2019-01-09
馬青公式
級數中的分數,分母增長很快,但我們可以對一個分式,不斷除以同一個低精度數(),就能得到所有分數的值。
# Python 實現
import pandas as pd
def f(number):
number1 = number+10
# 算到小數點後number1位
b = 10**number1
# 求含4/5的首項
x1 = b*4//5
# 求含1/239的首項
x2 = b// -239
# 求第一大項
he = x1+x2
#設定下面迴圈的終點,即共計算n項
number *= 2
#迴圈初值=3,末值2n,步長=2
for i in range(3,number,2):
# 求每個含1/5的項及符號
x1 //= -25
# 求每個含1/239的項及符號
x2 //= -57121
# 求兩項之和
x = (x1+x2) // i
# 求總和
he += x
# 求出π
pai = he*4
#舍掉後十位
pai //= 10**10
############ 輸出圓周率π的值
result=str(pai)
return result
最後為了方便統計出現的數字的次數,將其轉換為series格式,並定義以下函式來視覺化。
def show(n,plt_type='pie' ):
result = f(n)
a = pd.Series([int(i) for i in result])
b = a.value_counts()
if plt_type=='pie':
plt.figure(figsize=(10,8))
plt.pie(b,labels=b.index,explode=[0.05]*10,shadow=True,autopct='%1.1f%%')
plt.show()
elif plt_type=='bar':
plt.figure(figsize=(10,8))
plt.bar(b.index,b.values)
plt.show()
else:
print('Type Wrong')
利用此函式可輸出餅圖或柱形圖
當n=100時:
show(100,'pie')
show(100,'bar')
當n=10000時:
show(10000,'bar')
show(10000,'pie')
由此來看應該是正規數。突然想看看在其中會不會出現自己的生日,於是定義以下函式
import re
def find_(pattern,result):
loc = result.find(pattern)
return loc
result=f(300000)#產生300000位數
find_('199766',result)
最後return了140151,驚奇竟然真的在裡面了!(雖然這個演算法有誤差hhh不過姑且當他正確吧)