逆元
什么是逆元?
对于整数a,若ax=1(mod p),则称x为a模p意义下的逆元
逆元有什么用?
一般地,逆元用来实现取模下的除法
对我们知道a*(1/a)=1,在模p意义下a*x mod p=1,所以x可以看做是模p意义下的1/a
逆元的求法
1、扩展欧几里得算法
ax=1(mod p)可以化为ax-py=1,可以用扩展欧几里得算法求出x
2、费马小定理
根据费马小定理,对于质数p有:a^(p-1)=1(mod p)
则有a*a^(p-2)=1(mod p)
所以a^(p-2)=1/a(mod p)
所以我们用快速幂就可以在O(logp)时间求出逆元=a^(p-2) mod p
3、递推公式
如果要用到很多数的逆元,一个个求就显得有些浪费时间,这里有一个O(n)求出n以内所有数逆元的方法:
记inv[i]为i的逆元,则
inv[i]=(p-p/i)*inv[p%i]%p
我们可以线性筛出,也可以O(logp)递归求单逆元