Ich muss nCr mod p
effizient berechnen. Im Moment habe ich dieses Stück Code geschrieben, aber es überschreitet das Zeitlimit. Bitte schlagen Sie eine optimalere Lösung vor.nCr mod p effizient berechnen, wenn n sehr groß ist
Für meinen Fall p = 10^9 + 7 and 1 ≤ n ≤ 100000000
Ich muss auch darauf achten, dass kein Überlauf ist als nCr mod p
garantiert in 32-Bit-Integer passen, kann jedoch n!
den Grenzwert überschreiten.
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: Auch ich denke, dass mein Code möglicherweise nicht vollständig korrekt ist. Allerdings scheint es für kleine n
richtig zu funktionieren. Wenn es falsch ist, bitte zeig es!
Welche Version von Python verwenden Sie? – inspectorG4dget
Ich benutze Python 2.7.2 – OneMoreError
Warum sorgen Sie sich über Überlauf? Die Integer-Typen von Python haben keinen festen Speicherplatz. es wird so viel Speicherplatz wie nötig benötigen. –