我想计算一下
对于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好像你会得到一个浮动回来否则,这可能会把事情搞砸。

09-28 09:00