乘法逆元及其三种求法

什么是逆元?

如果 ax1(modp),且 ap 互质 gcd(a,p)=1,则 xa 在模 p 意义上的逆元,也就是 ax1(modp)

first.费马小定理求逆元

我们知道费马小定理是:ap11(modp)
两边同时乘上 a1,就转换成 ap2a1(modp)。用一个快速幂即可得到 a 的逆元。

int pow(int a, int b, int p){
    int ret=1;
    while(b){
        if(b&1)
            ret=(ret*a)%p;
        a=(a*a)%p;
        b>>=1;
    }
    return ret;
}
int inv(int a, int p){
    return pow(a,p-2,p);
}

second.拓展欧几里得求逆元

我们知道,拓展欧几里得是用来求解 ax+py=gcd(a,p),又因为 p 是质数,即 ax1(modp)。所以方程的 x 就是 a的逆元。


void exgcd(int a,int b){
  	if(!b){x=1,y=0;return ;}
  	exgcd(b,a%b);
  	int t=x;
 	 x=y,y=t-a/b*y;
}
int main(){
  	int n,p;
  	scanf("%d%d",&n,&p);
  	exgcd(n,p);
  	cout<<(x%p+p)%x;
  	return 0;
}

third.线性推逆元

首先我们设,k=pi,r=pmodi,那么就能知道 k×i+r0(modp)

然后我们将等式两边同时乘上 i1r1,就能得到 k×r1+i10(modp)

k×r1 移到右边去,即 i1k×r1(modp)

也就是 i1pi×(pmodi)1(modi)

inv[1]=1;
for(int i=2;i<p;++i)
    inv[i]=(p-p/i)*inv[p%i]%p;
posted @   bhbjzyh  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示