若ax≡1 mod f, 则称a关于模f的乘法逆元为x。也可表示为ax≡1(mod f)。
当a与f互素时,a关于模f的乘法逆元有唯一解。如果不互素,则无解。如果f为素数,则从1到f-1的任意数都与f互素,即在1到f-1之间都恰好有一个关于模f的乘法逆元。
(不会证明,想通了补)
首先a与f要互素,否则无逆元
扩展欧几里德的证明和代码http://www.cnblogs.com/jhz033/p/5330252.html
ax≡1 mod f;相当于ax+fy==1,因为gcd(a,f)==1;
x解出来就是逆元
如果f为素数。可以根据费马小定理得到逆元为。
推导过程如下
3.公式如下
现在我们来证明它,已知,证明步骤如下
上面部分取自http://blog.csdn.net/acdreamers/article/details/8220787
逆元打表,根据模的那个数如果是素数m,可以o(n)直接打表所有的对m的逆元,不用每次都log级别求逆元;
typedef long long ll; const int N = 1e5 + 5; int inv[N]; void inverse(int n, int p) { inv[1] = 1; for (int i=2; i<=n; ++i) { inv[i] = (ll) (p - p / i) * inv[p%i] % p; } }