Extended Euclidean Algorithm(EEA) as suggested by its name, is an extension of Euclidean Algorithm(EA) that alongside with finding GCD(x,y), also finds a way to represent GCD(x,y) in terms of x and y.

a.x + b.y = GCD(x,y)

Function’s Input: x,y Function’s Output: GCD(x,y),a,b

GCD, a, b = EEA(x,y)

In EEA, we will use EA as sub-routine while simultaneously calculating a and b.

Euclidean Algorithm to calculate GCD(x,y), recursively calls GCD(y%x,x).

Let g = GCD(x,y), x' = y%x, y' = x.

g, A, B = EEA(x',y') <—– recursive call

The above statement implies: A.x' + B.y' = g

Substituting x' = y - floor(y/x).x and y' = x, we get

(B-floor(y/x).A).x + A.y = g

Therefore

a = B - floor(y / x).A  and b = A

Implementation:

int gcd(int x, int y, int & a, int & b) {
    if (x == 0) {
        a = 0;
        b = 1;
        return y;
    }
    int A, B;
    int d = gcd(y % x, x, A, B);
    a = B - (y / x) * A;
    b = A;
    return d;
}