gpt4 book ai didi

python 阶乘级数匹配范围内的第一对

转载 作者:行者123 更新时间:2023-12-01 05:55:17 25 4
gpt4 key购买 nike

我是一个新手,我正在尝试在 python 中编写以下阶乘序列,以计算有限范围内序列中的第一个匹配数字。kd×d×(d−1)×⋯×(d−k+1)d×d×⋯d=k(d−1)!dk(d−k)!所以一场比赛所需人数的预期值为Σk=1d(k+1)k(d−1)!dk(d−k)!.

由于数字的大小,它会出错:OverflowError:long int 太大,无法转换为 float所以我正在使用日志但仍然收到错误。想知道是否有人对此有好主意。

 m = 365
q = 1
a=[]
for x in range(q,m):
#y = y + x*(1/365)
#####y = y + (factorial(x)/(factorial(m-x)*(exponent(m,x))))
a.append((log((factorial(m))/exponent(m,x)))*log((q+x)/m))
#y = [(m-x)*factorial(m-x)/m]
#print ("x: ",x," y: ",y)
#return "a:",a," product-sum:",[a*a for a in a]
return sum(a)

抱歉,我发现上面的等式不清楚。这就是我想要表达的: http://en.wikipedia.org/wiki/Birthday_problem#Average_number_of_people

最佳答案

编辑:刚刚意识到 - 我认为日志首先不会对您有太大帮助:您正在尝试计算总和,而日志对总和不太友好(它们适合产品)。

您提供的链接建议了另一种方法(紧随您引用的公式之后的公式),如果您以正确的顺序进行计算,则应该避免出现大量数字。但舍入误差的累积可能会影响结果。在代码中

m = 365 
ans = 0
for x in range(0,m-1):
tmp = 1
for y in range(0,x):
tmp *= (M-y)/M
ans += tmp
return ans

也就是说,使用给定的渐近公式可能是更好的计算方法。

关于python 阶乘级数匹配范围内的第一对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12869735/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com