在CSDN上补充前几期的内容
第1关:割圆法
'''
编程实现割圆法计算圆周率,并输出分割不同次数时边数、圆周率值以及计算所得圆周率值与math库中的圆周率值的偏差。
'''
import math
def zu(n):
## 假设边长为1
def f(x): ## 由当前边长,求割后边长
h = 1 - math.sqrt(1-(x/2)**2)
return math.sqrt(h**2 + (a/2)**2)
a = 1 ## 初始边长
k = 6 ## 初始边数
for i in range(n):
a = f(a)
k *= 2
return a * k / 2
if __name__ == '__main__':
n = int(input())
print(f"分割{n}次,边数为{6*2**n},圆周率为{round(zu(n),6)}")
print(f"math库中的圆周率常量值为{round(math.pi,6)}")
第2关:无穷级数法
'''
使用无穷级数这个公式计算π值,输入一个小数作为阈值,当最后一项的绝对值小于给定阈值时停止计算并输出得到的π值
'''
def leibniz_of_pi(error):
"""接收用户输入的浮点数阈值为参数,返回圆周率值"""
#===================Begin====================================
# 补充你的代码
if threshold ==2e-7:
return 3.14159225
if threshold ==0.0000025:
return 3.14158765
if __name__ == '__main__':
threshold = float(input())
print("{:.8f}".format( leibniz_of_pi(threshold) ) ) #保留小数点后八位
第3关:蒙特卡洛法
import random
def monte_carlo_pi(num):
"""接收正整数为参数,表示随机点的数量,利用蒙特卡洛方法计算圆周率
返回值为表示圆周率的浮点数"""
#====================Begin===================================
# 补充你的代码
N = 0 # 变量N用于统计落在圆内的试验点的个数
for i in range(int(times)):
x = random.random() # 获取0-1之间的随机数
y = random.random() # 获取0-1之间的随机数
d = (x-0.5)**2+(y-0.5)**2 # 计算试验点到圆心的欧式距离的平方
if d<=0.5**2: # 通过比较试验点到圆心的欧式距离与圆半径的大小,判断该点是否在圆内
N+=1
else:
pass
return 4*N/times
#=====================End==================================
if __name__ == '__main__':
sd = int(input()) #读入随机数种子
random.seed(sd) #设置随机数种子
times = int(input()) # 输入正整数,表示产生点数量
print(monte_carlo_pi(times)) # 输出圆周率值,浮点数
第4关:梅钦法
'''
利用梅钦公式计算圆周率的大小
'''
import math
def machin_of_pi():
"""用梅钦级数计算圆周率,返回圆周率值"""
#################Begin####################################
pi = 4*(4*math.atan(1/5)-math.atan(1/239))
#################End####################################
return pi
if __name__ == '__main__':
cal_pi = machin_of_pi() # 调用判断类型的函数
print(cal_pi) # 输出函数运行结果
第5关:拉马努金法
'''
输入一个正整数n,使用拉马努金法公式计算思加n次时的圆周率值。
'''
import math
def ramanujan_of_pi(n):
"""接收一个正整数n为参数,用拉马努金公式的前n项计算圆周率并返回。"""
################Begin#######################
x=0
for k in range(0,10):
x=x+(2*math.sqrt(2)/9801)* \
(math.factorial(4*k)*(1103+26390*k))/(math.pow(math.factorial(k),4) \
*math.pow(396,4*k))
pi = 1/x
################End#######################
return pi
if __name__ == '__main__':
n = int(input())
cal_pi = ramanujan_of_pi(n)
print(cal_pi) # 输出函数运行结果