逆元+快速幂

求逆元ax=1 (mod m) x是a的逆元

(1)用扩展欧几里得求
int Inv(int a,int m)
{
  int r,x,y;
  r=exgcd(a,m,x,y);
  if(r==1) return (x%m+m)%m;
  return -1;
}
(2)用快速幂取模求a*a^(p-2)=a^(p-1)=1 (mod p) p必须为素数,a的逆元是a^(p-2);
int pow(int a,int n)//a^n%p (n=p-2)
{//这里的做法会让a的值变化,可令t=a;用t代替a计算
 int r=1;
 while(n)
 {
  if(n&1) r=r*a%p;
  a=a*a%p;
  n>>=1;
 }
 return r;
}

发布了125 篇原创文章 · 获赞 126 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/Valieli/article/details/103590156