gpt4 book ai didi

c - 高效计算 nCk mod p

转载 作者:行者123 更新时间:2023-11-30 15:53:16 24 4
gpt4 key购买 nike

这个问题我已经遇到过很多次了,但是一直无法解决。在某些情况下会出现错误的答案,或者我编写的程序会太慢。正式地说,我正在谈论计算

nCk mod p 其中 p 是质数 n 是一个大数,且 1<=k<=n。

我尝试过什么:

我知道阶乘的递归公式,然后将其建模为动态规划问题,但我觉得它很慢。递归公式为(nCk) + (nCk-1) = (n+1Ck)。我在将值存储在数组中以避免溢出时处理了模数,但我不确定仅对结果执行 mod p 是否会避免所有溢出,因为可能需要删除。

最佳答案

要计算 nCr,有一个基于规则 nCr = (n - 1)C(r - 1) * n/r 的简单算法:

def nCr(n,r):
if r == 0:
return 1
return n * nCr(n - 1, r - 1) // r

现在,在模算术中,我们不完全有除法,但我们有模逆(当用素数进行模运算时)同样好

def nCrModP(n, r, p):
if r == 0:
return 1
return n * nCrModP(n - 1, r - 1) * modinv(r, p) % p

这是一个implementation of modinv在罗塞塔代码上

关于c - 高效计算 nCk mod p,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13780137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com