Tôi cần tính nCr mod p
hiệu quả. Ngay bây giờ, tôi đã viết đoạn mã này, nhưng nó vượt quá giới hạn thời gian. Vui lòng đề xuất giải pháp tối ưu hơn.Tính ncr mod p hiệu quả khi n là rất lớn
Đối với trường hợp của tôi, p = 10^9 + 7 and 1 ≤ n ≤ 100000000
Tôi có cũng để đảm bảo rằng không có tràn như nCr mod p
được đảm bảo để phù hợp với 32 bit số nguyên, tuy nhiên n!
có thể vượt quá giới hạ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: Ngoài ra tôi nghĩ mã của tôi có thể không hoàn toàn chính xác. Tuy nhiên, có vẻ như nó hoạt động chính xác cho n
nhỏ. Nếu nó sai, xin vui lòng chỉ ra!
Bạn đang sử dụng phiên bản python nào? – inspectorG4dget
Tôi đang sử dụng Python 2.7.2 – OneMoreError
Tại sao bạn lo lắng về tình trạng tràn? Các kiểu số nguyên của Python không có dung lượng lưu trữ cố định; nó sẽ mất nhiều không gian lưu trữ như nó cần. –