1. 程式人生 > >幾種求逆元的方法

幾種求逆元的方法

int 才有 gpo log swa class ++ 要求 1-n

一, 擴展歐幾裏得

 1 void exgcd(int a,int b,int &x,int &y)
 2 {
 3     if(b==0)
 4     {
 5         x=1;y=0;return;
 6     }
 7     exgcd(b,a%b,x,y);
 8     swap(x,y);
 9     y=y-a/b*x;
10 }
11 //a在%b意義下的逆元
12 //a*x+b*y=1的解->要求a與b互質才有解 

二,費馬小定理求逆元

要求:模數p為質數

費馬小定理:a^(p-1)=1(mod p)
那麽a^(p-2)=a^-1(mod p)

也就是說a的逆元為a^(p-2)

直接快速冪求逆元

三:快速求出多個數(1-n)的逆元

O(n)遞推

1  inv[1]=1;
2     for(int i=2;i<=n;++i)
3        inv[i]=(ll)(p-p/i)*(ll)inv[p%i]%p;
4     

幾種求逆元的方法