参考:https://blog.youkuaiyun.com/baidu_35643793/article/details/75268911
费马小定理求逆元 O(logn):
const int mod = 1000000009;
long long quickpow(long long a, long long b) {
if (b < 0) return 0;
long long ret = 1;
a %= mod;
while(b) {
if (b & 1) ret = (ret * a) % mod;
b >>= 1;
a = (a * a) % mod;
}
return ret;
}
long long inv(long long a) {
return quickpow(a, mod - 2);
}
逆元线性筛 O(n):
const int mod = 1000000009;
const int maxn = 10005;
int inv[maxn];
inv[1] = 1;
for(int i = 2; i < 10000; i++)
inv[i] = inv[mod % i] * (mod - mod / i) % mod;
阶乘的逆元 O(logn+n):
inv[maxn]=mod_pow(fac[maxn],mod-2);
for(ll i=maxn-1;i>=0;i--)
inv[i]=(inv[i+1]*(i+1))%mod;
本文详细介绍了利用费马小定理求逆元的算法,包括O(logn)的快速幂方法和O(n)的逆元线性筛算法,以及阶乘逆元的计算方式。适用于大数运算和模意义下的除法操作。
2259

被折叠的 条评论
为什么被折叠?



