我想计算一下
对于n≥m,两个值都是最大1000的整数最终的结果是一个不比n大多少的数字,但是中间值太大,python无法处理你怎么能解决这个问题?
我对函数的定义如下。
from scipy.misc import comb
def S(n,m):
return n+m-sum([k**(k - 1)*comb(n, k)*(n - k)**(n + m - k)/n**(n + m - 1) for k in xrange(1,n+1)])
例如,我得到的
n=m=100
错误是RuntimeWarning: overflow encountered in multiply
return n+m-sum([k**(k - 1)*comb(n, k)*(n - k)**(n + m - k)/n**(n + m - 1) for k in xrange(1,n+1)])
[...]
OverflowError: long int too large to convert to float
最佳答案
似乎问题出在scipy的定义上。当我提供一个自制版本时,它运行良好:
import math
def choose(n,k):
return math.factorial(n) / (math.factorial(k)*math.factorial(n-k))
comb = choose
def S(n,m):
return n+m-sum([k**(k - 1)*comb(n, k)*(n - k)**(n + m - k)/n**(n + m - 1) for k in xrange(1,n+1)])
print S(1000,1000)
结果(大约1.5秒后):
1844
作为编写自己的
comb
的替代方法,尝试将可选的comb
参数传入True
好像你会得到一个浮动回来否则,这可能会把事情搞砸。