我是一个新手,我正在尝试在 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 too large to convert to 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