Tuesday, June 28, 2016

Modular Inverse source code

Tutorial Link http://blog.forthright48.com/2015/09/modular-multiplicative-inverse.html

Code

#include<bits/stdc++.h>
#define ll long long

using namespace std;

ll int X=-1,Y=-1;

ll int ext_gcd ( ll int A,ll int B){
    ll int x2, y2, x1, y1, x, y, r2, r1, q, r;
    x2 = 1; y2 = 0;
    x1 = 0; y1 = 1;
    for (r2 = A, r1 = B; r1 != 0; r2 = r1, r1 = r, x2 = x1, y2 = y1, x1 = x, y1 = y ) {
        q = r2 / r1;
        r = r2 % r1;
        x = x2 - (q * x1);
        y = y2 - (q * y1);
    }
    X = x2;
    Y = y2;

    return r2;
}

ll int minv(ll int a,ll int m)
{
    ext_gcd(a,m);

    X=X%m;

    if(X<0) X=X+m;

    return X;
}

int main()
{
    ll int a,m;
    scanf("%lld%lld",&a,&m);

    printf("%lld",minv(a,m));

}

No comments:

Post a Comment