圓周率計算方法:近似公式,蒙特卡羅方法
1. 近似公式
pi = 0N = 100for k in range(N) :pi += 1/pow(16,k)*( \ 4/(8*k+1) – 2/(8*k+4) - \ 1/(8*k+5) – 1/(8*k+6))print("圓周率值是: {}".format(pi))
pi = 0N = 100for k in range(N) :pi += 1/pow(16,k)*( \ 4/(8*k+1) – 2/(8*k+4) - \ 1/(8*k+5) – 1/(8*k+6))print("圓周率值是: {}".format(pi))
>>>圓周率值是: 3.141592653589793
python中可以用「\」換行,功能不變
2. 蒙特卡羅方法
蒙特卡羅方法具體內容可以參考:https://baike.baidu.com/item/%E8%92%99%E7%89%B9%C2%B7%E5%8D%A1%E7%BD%97%E6%96%B9%E6%B3%95/8664362?fromtitle=%E8%92%99%E7%89%B9%E5%8D%A1%E7%BD%97%E6%96%B9%E6%B3%95&fromid=214674&fr=aladdin
其大致原理如下圖所示:
將一個圓放在其外接正方形中,取其1/4,在1/4圓和矩形中隨機撒點,根據點落在各個部分的數量確定圓與正方形面積比,根據面積計算圓周率。
from random import randomfrom time import perf_counterDARTS = 1000*1000hits = 0.0start = perf_counter()for i in range(1, DARTS+1):x, y = random(), random() dist = pow(x ** 2 + y ** 2, 0.5) if dist <= 1.0: hits = hits + 1pi = 4 * (hits/DARTS)print("圓周率值是: {}".format(pi))print("運行時間是: {:.5f}s".format(perf_counter()-start))
3. 質數求和
質數(素數)是指在大於1的自然數中,除了1和它本身以外不再有其他因數的自然數。
質數(素數)求和如下,可修改範圍滿足不同的求解需求
a = 0for i in range(2,100):k = i for j in range(2,i): if i%j == 0: k=0 break a += kprint(a)