Ho bisogno di calcolare nCr mod p
in modo efficiente. In questo momento, ho scritto questo pezzo di codice, ma supera il limite di tempo. Si prega di suggerire una soluzione più ottimale.Calcolo nCr mod in modo efficiente quando n è molto grande
per il mio caso, p = 10^9 + 7 and 1 ≤ n ≤ 100000000
devo fare anche in modo che non v'è alcun trabocco come nCr mod p
è garantito per adattarsi a 32 bit integer, tuttavia n!
possono superare il limite.
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: Inoltre, penso che il mio codice potrebbe non essere completamente corretto. Tuttavia, sembra funzionare correttamente per il piccolo n
. Se è sbagliato, perfavore segnalalo!
Quale versione di python stai usando? – inspectorG4dget
Sto usando Python 2.7.2 – OneMoreError
Perché ti preoccupi per l'overflow? I tipi interi di Python non hanno uno spazio di archiviazione fisso; occuperà tutto lo spazio di cui ha bisogno. –