[学习笔记]乘法逆元

乘法逆元:若\(ab\equiv1(mod\;p)\),则称\(b\)\(a\)\(mod\;p\)意义下的乘法逆元.

本文介绍乘法逆元的三种求法.

扩展欧几里得求逆元

因为\(ab\equiv1(mod\;p)\),所以设\(q\)满足\(ab+pq=1\),

则可以用扩展欧几里得求关于\(b,q\)的方程\(ab+pq=1\)的一组解,即求出\(b\).

inline int exgcd(int a,int b,int &x,int &y){
if(!b){
x=1;y=0;return a;
}
int ret=exgcd(b,a%b,y,x);
y-=a/b*x;return ret;
}
inline int inver{
r=exgcd(a,p,b,q);
if(r!=1) return -1;
return b;
}

费马小定理求逆元

因为\(a^{p-1}\equiv1(mod\;p)(gcd(a,p)=1)\),所以\(a\;\times\;a^{p-2}\equiv1(mod\;p)\),

\(a^{p-2}\)\(a\)\(mod\;p\)意义下的逆元.

typedef long long ll;
inline ll power(ll x,ll k){
ll ret=1;
while(k){
if(k&1) ret=retx%p;
x=x
x%p;k>>=1;
}
return ret;
}
inline ll inver{
return power(a,p-2);
}

线性求逆元

\(re[i]\)表示\(i\)\(mod\;p\)(\(p\)为质数)意义下的逆元。

\(re[i]=\begin{cases}1&i=1\\-p/i\;\times\;re[p\;mod\;i]&i>1\\\end{cases}\)

证明:
因为\((p/i)\;\times\;i+p\;mod\;i=p\),
所以\((p/i)\;\times\;i+p\;mod\;i\equiv0(mod\;p)\)
所以\((p/i)\;\times\;i\equiv-p\;mod\;i(mod\;p)\)
所以\(-p/i\;\equiv\;p\;mod\;i\times\;i^{-1}(mod\;p)\)
所以,

\(\begin{split} &-(p/i)\;\times\;re[p\;mod\;i]\\ \equiv&-(p/i)\times(p\;mod\;i)^{-1}\\ \equiv&(p\;mod\;i)\;\times\;i^{-1}\times(p\;mod\;i)^{-1}\\ \equiv&\;i^{-1}(mod\;p)\\ \end{split}\)

typedef long long ll;
inline ll inver{
re[1]=1;
for(ll i=2,mul;i<=a;++i){
re[i]=-p/ire[p%i]%p;
if(re[i]<0){
mul=(0-re[i])/p+1;
re[i]=(re[i]+mul
p)%p;
}
}
return re[a];
}

posted @ 2016-10-03 20:40  Aireen_Ye  阅读(307)  评论(0)    收藏  举报
底部 顶部 留言板 归档 标签
Der Erfolg kommt nicht zu dir, du musst auf den Erfolg zugehen.