乘法逆元

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 ;

}
View Code

 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;

}
View Code

 

你可能感兴趣的:(乘法逆元)