逆元在数论中是一个重要的概念,主要是用于在模意义下的除法运算.
若,则称b在模p意义下是a的逆元.
逆元在p是质数的情况下主要有三种求法:
1.费马小定理求逆元
因为费马小定理的标准格式是,在p是质数的情况下,.
所以a^(p-2)就是a的逆元,直接一个快速幂就可以了.
若p不是质数,我们就可以用欧拉定理推.
关于欧拉定理和费马小定理.
2.扩欧求逆元
我们可以设x=a的逆元,则我们可以这样推导公式:
那么这就是一个标准的扩欧式子了.
关于扩展欧几里得.
3.线性推逆元
要是要让我们直接筛出1~n的逆元,虽然费马小定理和扩欧的时间复杂度都不错,是O(nlog(p))的.
但是我们还有一种直接O(n)计算的算法.
然后就可以线性推了,三行代码如下:
f[1]=1;
for (int i=2;i<=n;i++)
f[i]=(p-p/i)*f[p%i]%p;