组合数取模

经典问题:怎么计算

当n不大时 (n<=5000) 可以递推复杂度

n稍大(n<=1e7)且p大于n时可以预处理出阶乘与阶乘逆元,复杂度

p<n且p是素数而n较大时可以用lucas定理

如果此时p是几个不同素数的乘积,可以分别lucas然后中国剩余定理合并

但如果p=p1^k1*p2^k2...怎么办(保证pi^ki<=100000)

此时是不能用lucas的,因为pi^ki不是素数

考虑能不能算出n! m! (n-m)!来做

但是阶乘在模意义下一旦i>p就是0,逆元就没法算了,怎么办

对于pi^ki 我们尝试把x! 分解成与pi互质的数的乘积乘以pi的幂次


前面的每pi一个循环,发现后面又是一个阶乘形式,于是可以递归做下去

时间复杂度好像是级别的

然后算组合数的话,前面杂数正常模意义下运算,后面p的幂次指数加减快速幂即可

对于多个pi,中国剩余定理合并即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值