设计一个子函数,分别用莱布尼茨公式,欧拉乘积公式,ramanujjan公式计算圆周率,并用主函数调用子函数计算圆周率
时间: 2024-09-18 17:08:51 浏览: 60
设计一个用于计算圆周率的Python程序,我们可以创建三个子函数,分别对应莱布尼茨级数(Leibniz formula)、欧拉乘积公式(Euler's product formula)以及Ramanujan的无穷级数(Ramanujan's formula)。这里仅提供一个简化版本的示例,实际的数值计算可能需要使用循环、浮点数精度处理和适当的停止条件。
```python
import math
# 莱布尼茨公式子函数
def leibnitz_pi(n_terms):
pi = 0
sign = 1
for i in range(n_terms):
term = (sign / (2 * i + 1))
pi += term
sign *= -1
return 4 * pi
# 欧拉乘积公式子函数
def euler_product_pi(product_limit):
s = 1
factors = [1]
for i in range(2, product_limit+1):
if is_prime(i):
factors.append(i)
s *= (1 - 1/i)
return math.pi / s
# Ramanujan无穷级数子函数
def ramanujan_series(pi_estimate, n_terms):
series_sum = 0
for k in range(n_terms):
term = (1 / (8 * k**2 + 1)) - (1 / (8 * k**2 + 4)) + (1 / (8 * k**2 + 5)) - (1 / (8 * k**2 + 6))
series_sum += term
return pi_estimate + series_sum
# 辅助函数检查是否为质数
def is_prime(num):
if num < 2:
return False
for i in range(2, int(math.sqrt(num)) + 1):
if num % i == 0:
return False
return True
# 主函数调用子函数计算圆周率
def main():
leibnitz_term = 100000 # 使用莱布尼茨公式计算的项数
euler_limit = 1000 # 欧拉乘积的因子限制
ramanujan_n_terms = 100 # Ramanujan级数的迭代次数
leibnitz_pi_result = leibnitz_pi(leibnitz_term)
euler_pi_result = euler_product_pi(euler_limit)
ramanujan_pi_result = ramanujan_series(math.pi, ramanujan_n_terms)
print(f"Using Leibniz formula: pi ≈ {leibnitz_pi_result}")
print(f"Using Euler's product formula: pi ≈ {euler_pi_result}")
print(f"Using Ramanujan's series: pi ≈ {ramanujan_pi_result}")
if __name__ == "__main__":
main()
```
阅读全文