首页 > 代码库 > 阶乘逆元线推(巩固+优化)
阶乘逆元线推(巩固+优化)
有时候在计算组合数的时候会经常用n!的逆元,如果n<=1e5左右的话,其实可以O(n)预处理出来的,当然一般MOD是1e9+7
代码也不难写:
Fac[0] = 1;
for (int i = 1; i <= N; i++) Fac[i] = (Fac[i-1] * i) % MOD;
Inv[N] = pow_mod(Fac[N], MOD-2);//Fac[N]^{MOD-2}
for (int i = N - 1; i >= 0; i--) Inv[i] = Inv[i+1] * (i + 1) % MOD;
然后在使用的时候是直接return Fac[N]*Inv[M]%MOD*Inv[N-M]%MOD;//计算C(N, M),注意不要溢出
如果MOD比N要小的话要注意了,因为如果Inv[i+1] = 0的话会导致推到前面都是0了,另外虽然没有深究过,但是觉得在这种情况下这个效果不是非常好,
所以这种预处理就暂时只用在MOD是1e9+7 或 1e9+9上。(就本人)
阶乘逆元线推(巩固+优化)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。