【python】计算圆周率到任意位支持任意位(速度快)

引言

圆周率是圆的周长与直径的比值,用 π 表示,是数学中最重要和最奇妙的数字之一。本文教你如何使用 Python 实现圆周率的计算。(时间复杂度O(10n))

计算

圆周率计算公式: π = 2 + 1 3 ( 2 + 2 5 ( 2 + 3 7 ( 2 + 4 9 ( 2 + . . . ) ) ) ) π = 2 + \frac 13(2 + \frac 25 (2 + \frac 37(2 + \frac 49(2 + ...)))) π=2+31(2+52(2+73(2+94(2+...))))
Python代码:

from decimal import *
import time
start = time.time() #开始时间
getcontext().prec = 1000 + 1 #精度控制  +1是因为有3
pi = Decimal(2)
i = 1000 * 10 #迭代次数,根据精度来决定,大概是精度的10倍左右 所以时间复杂度是O(10n)
while i >= 1:
	#迭代过程
    pi = pi * Decimal(i) / Decimal(i * 2 + 1) + Decimal(2)
    i = i - 1
#输出
p = str(pi)
cnt = 0
print("3.")
for i in p:
    cnt = cnt + 1
    print(i, end = "")
    if cnt % 10 == 0:
        print(" ", end = "")
    if cnt % 50 == 0:
        print(f"     :{cnt}位")
print(f"\n运行时间:{time.time() - start}秒")

时间复杂度:O(10n)
decimal是高进度浮点型,不会的看这里

输出:

3.
1415926535 8979323846 2643383279 5028841971 6939937510      :50位
5820974944 5923078164 0628620899 8628034825 3421170679      :100位
8214808651 3282306647 0938446095 5058223172 5359408128      :150位
4811174502 8410270193 8521105559 6446229489 5493038196      :200位
4428810975 6659334461 2847564823 3786783165 2712019091      :250位
4564856692 3460348610 4543266482 1339360726 0249141273      :300位
7245870066 0631558817 4881520920 9628292540 9171536436      :350位
7892590360 0113305305 4882046652 1384146951 9415116094      :400位
3305727036 5759591953 0921861173 8193261179 3105118548      :450位
0744623799 6274956735 1885752724 8912279381 8301194912      :500位
9833673362 4406566430 8602139494 6395224737 1907021798      :550位
6094370277 0539217176 2931767523 8467481846 7669405132      :600位
0005681271 4526356082 7785771342 7577896091 7363717872      :650位
1468440901 2249534301 4654958537 1050792279 6892589235      :700位
4201995611 2129021960 8640344181 5981362977 4771309960      :750位
5187072113 4999999837 2978049951 0597317328 1609631859      :800位
5024459455 3469083026 4252230825 3344685035 2619311881      :850位
7101000313 7838752886 5875332083 8142061717 7669147303      :900位
5982534904 2875546873 1159562863 8823537875 9375195778      :950位
1857780532 1712268066 1300192787 6611195909 2164201989      :1000位

运行时间:0.13795548439025879秒

验证,计算正确
注:计算100000位用了464秒(8分钟),内存大约用了八九百MB,计算更多位数要花更多时间和内存!!!

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值