我需要高效地計算nCr mod p
。現在,我寫了這段代碼,但它超出了時間限制。請建議更優化的解決方案。當n非常大時,有效地計算nCr mod p
對於我而言,p = 10^9 + 7 and 1 ≤ n ≤ 100000000
我也必須確保沒有溢出的nCr mod p
保證,以適應32位整數,但n!
可能會超出限制。
def nCr(n,k):
r = min(n-k,k)
k = max(n-k,k)
res = 1
mod = 10**9 + 7
for i in range(k+1,n+1):
res = res * i
if res > mod:
res = res % mod
res = res % mod
for i in range(1,r+1):
res = res/i
return res
PS:另外我覺得我的代碼可能不完全正確。但是,它似乎正確地適用於小型n
。如果錯了,請指出!
你正在使用哪個版本的python? – inspectorG4dget
我正在使用Python 2.7.2 – OneMoreError
爲什麼你擔心溢出? Python的整數類型沒有固定的存儲空間;它會佔用盡可能多的存儲空間。 –