递推求逆元,求组合数

来源:互联网 发布:铁血联盟 1.13武器数据 编辑:程序博客网 时间:2024/05/16 04:08

求逆元有许多种方法,一般求单个数的逆元可以用拓展欧几里得或者费马小定理,在这里提供一种用递推关系求逆元的方法,时间复杂度是O(n),一般用于需要初始化逆元表的题目。



int fac[105];int inv[105];int get_inv(int n) {if (n == 1)return 1;return get_inv(MOD%n)*(MOD - MOD / n) % MOD;}int Com(int n, int m) {return fac[n] * inv[m] % MOD*inv[n - m] % MOD;//求组合数  }void init() {inv[0] = fac[0] = 1;for (int i = 1; i<MAXN; i++) {fac[i] = fac[i - 1] * i%MOD;//存阶乘  inv[i] = get_inv(fac[i]);//存逆元  }}






原创粉丝点击