d模f的乘法逆元
int Extend_Eulid(int d,int f) { int x1,x2,x3,y1,y2,y3 ; x1=1,x2=0,x3=f,y1=0,y2=1,y3=d ; while(y3 && y3!=1) { int q=x3/y3 ; int t1,t2,t3 ; t1=x1-q*y1,t2=x2-q*y2,t3=x3-q*y3 ; x1=y1,x2=y2,x3=y3 ; y1=t1,y2=t2,y3=t3 ; } if(!y3)return -1 ; return y2 ; }
a模n的乘法逆元
void gcd(int a,int b,int &d,int &x,int &y){ if(!b){ d=a;x=1;y=0; } else gcd(b,a%b,d,y,x),y-=x*(a/b); } int inv(int a,int n){ int d,x,y; gcd(a,n,d,x,y); return d==1?(x+n)%n:-1; }