Мне нужно рассчитать nCr mod p
эффективно. Прямо сейчас, я написал этот фрагмент кода, но он превышает срок. Пожалуйста, предложите более оптимальное решение.Вычисление nCr mod p эффективно, когда n очень велико
Для моего случая, 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 не имеют фиксированного пространства для хранения; для этого потребуется столько места для хранения, сколько потребуется. –