0%

线性求逆元

公式 && 食用方法

设$Inv(i)$表示$i$在模$M$意义下的逆元,则有:
$Inv(i) \equiv (-\lfloor{M\over i}\rfloor ) \times Inv(M \mod i)\mod M$
由于$(M\mod i )< i$,所以可以利用这个公式线性预处理出逆元。

当模数比较小的时候,可以预处理出$[0,M)$的所有数的逆元,然后算法的复杂度就可以少一个$\log M$~


推导过程

设$t=\lfloor{M\over i}\rfloor,k=M\mod i$。

让左右两边同时除以一个$i\times k$:

就得到了前面的公式


代码

1
inv[1]=1; for(int i=2;i<mod;++i) inv[i]=(mod-mod/i)*inv[mod%i]%mod;