优化一个简单的Python脚本来计算大二的梦想号

Optimization of a simple Python script to calculate the first sophomore's dream number

我目前正在编写一个程序来计算大二的第一个梦想常数 I1 的 100,000 位。它由下面的总和给出。

在这个系列的大约 10,000 个术语之后,它变得相当慢。我选择把程序写得这么小,因为我想看看我能把它写多小

from decimal import *

def sophodream(a):
    s,i,t=0,1,int(a*1.5)
    while i<t:
         print(i)
         n,d=Decimal(pow(-1,i+1)),Decimal(i**i)
         f=n/d
         s+=f
         i+=1
    return s

我想知道除了 multithreading/multiprocessing 之外是否还有任何方法可以加快速度。我发现当我在螺纹件中做这些系列时,它们的准确性会降低。

可以对您的代码进行一些小的更改/简化,但正如已经指出的那样,您(有时)正在处理一些 非常 的大数字。

from decimal import getcontext, Decimal

def sophodream(a):
    s, p = 0, 1
    getcontext().prec = a
    for i in range(1, int(a * 1.5)):
        s += p / Decimal(i**i)
        p = -p
    return s

print(sophodream(100))

输出:

0.7834305107121344070592643865269754694076819901469309582554178227016001845891404456248642049722689389

显然只是一个非常简短的版本来证明功能