Native
若 $a × x \equiv 1(mod \ b)$,$a,b$ 互质,则称 $x$ 为 $a$ 的逆元,记为 $a^{-1}$。
逆元用于计算 $t/a \ mod \ b$ 时,转化为 $t×a^{-1} \ mod \ b$。
求逆元
拓展欧几里德
有一个在线性同余方程部分没有记录的性质:
然后就可以根据 $a×x\equiv1(mod \ b)$ 得出
然后用拓展欧几里德解该方程即可。
1 | void exgcd(int a,int b,int &x,int &y){ |
费马小定理
考虑通过费马小定理,如果$b$是质数的情况下:
因此用快速幂求出 $a^{b-2}$ 即可,与 $a$ 相乘正好是 $a^{b-1}$。
但是因为费马小定理必须规定 $b$ 为质数,因此该推论只能用于 $b$ 是质数的情况。
1 | inline int fastpow(int a,int b,int m){ |
线性递推逆元
有一种线性的逆元递推方法,证明和实现都非常显然。
1 |
|
总结对比
算法名称 | 复杂度 | 前提 | 特点 |
---|---|---|---|
拓展欧几里德 | $O(log_2(a+b))$ | $ab$ 互质 | $b$ 可以为合数 |
费马小定理 | $O(log_2b)$ | $ab$ 互质 | $b$ 必须为质数 |
线性递推 | $O(N)$ | - | - |