1. Introduction
In this tutorial, we’ll explain the extended Euclidean algorithm (EEA). It’s a tool widely used in cryptography and one of the fundamental algorithms in number theory. In addition to its recursive version, we’ll present its iterative variant.
2. Bézout’s Identity
Bézout’s identity states that the greatest common divisor (GCD) of any two integers is their linear combination. So, if is the GCD of
and
, then there exist integers
and
such that:
(1)
For example, if and
, then
and:
The extended Euclidean algorithm (EEA) finds and
, which are called Bézout’s coefficients of
and
. As we’ll see, EEA is a modification of the Euclidean algorithm for finding the GCD of two numbers.
2.1. Assumptions
In what follows, we’ll assume that and
are both positive and that
. We lose no generality under those assumptions because:
which means that we can consider only the case :
- If either of
and
is zero, then we output the other number as their GCD and set the corresponding coefficients to
and
.
- If
(or
) is negative, then we replace it with its absolute value.
- Finally, we can switch
and
if
.
3. The Euclidean Algorithm (EA)
The Euclidean algorithm (EA) finds the GCD of and
by using the fact that:
and applying Euclidean division until it gets zero as the remainder:
The last nonzero remainder () is the GCD of
and
. As we see, the recursion is:
(2)
where . We’ll find it useful to re-formulate the recursive rule so that we express the remainder in terms of the dividend and the divisor:
(3)
4. The Recursive Version of the Extended Euclidean Algorithm
The recursive extension of EA (REEA) runs just like the regular EA until it computes , the GCD of the input numbers
and
. At that point, it starts recursing back to the beginning, revisiting the division steps of
backward. After backtracking to a division step, REEA expresses the GCD as a combination of the step’s divisor and dividend.
So, from the second-to-last division, we get:
Now, backtracking to , we replace
with
, so we have:
In general, let’s say we revisited the division step and expressed
as a linear combination of
and
:
(4)
Recursing one step back, we substitute with
in Equation (4):
(5)
Therefore, we obtain the following backward recursive rules:
(6)
We apply them going backward through the division steps until we finally represent the GCD as a linear combination of and
:
algorithm RecursiveExtendedEuclideanAlgorithm(a, b):
// INPUT
// a, b = two non-negative integers
// OUTPUT
// d = the greatest common divisor (GCD) of a and b
// x, y = integers such that d = x * a + y * b
if b = 0:
d <- a
x <- 1
y <- 0
return (d, x, y)
q <- floor(a / b)
r <- a mod b
(d, x, y) <- RecursiveExtendedEuclideanAlgorithm(b, r)
return (d, y, x - q * y)
4.1. Example
Let’s say that and
. Applying the algorithm, we do five Euclidean divisions:
Or, using recurrence (3):
After identifying the GCD, we go backward one division step. From there, we get and climb one step up to see what to substitute
with:
After some elementary algebra, we get that . Then, we go up a step again to see what to replace
with:
and get . In the end, we backtrack to the first division step:
and obtain Bézout’s coefficients:
(7)
5. The Iterative Version of the Extended Euclidean Algorithm
We can compute the coefficients without backtracking. The idea is to express each step’s remainder as a linear combination of and
. To do so, we start by noting that:
In general, we’ll have:
(8)
and we want rules for calculating the coefficients in a step given those from the previous steps. As it turns out, we need only the coefficients from the previous two steps. So, let’s suppose that we know ,
,
, and
for some
:
Using Equation (3), we get:
(9)
Hence, these are our forward recurrences for the coefficients:
(10)
We start from and
and gradually work our way through division steps until we calculate the GCD, at which point we also obtain the sought Bézout’s coefficients:
algorithm terativeExendedEuclideanlgorithm(a, ):
// INUT
// a, b = two positive integers
// OUTPUT
// d = the GCD of a and b
// x, y = the coefficients such that d = GCD(a, b) and d = xa + yb
// x``, x`, y``, and y` correspond to x_k, x_{k+1}, y_k, y_{k+1} in recurrences (10)
x`` <- 1
x` <- 0
y`` <- 0
y` <- 1
while b > 0:
q <- a div b
r <- a mod b
x <- x` - q * x``
y <- y` - q * y``
x`` <- x`
x` <- x
y`` <- y`
y` <- y
a <- b
b <- r
d <- a
return (d, x, y)
This is how it’ll look like step by step:
This iterative form of the EEA is equivalent to the Blankinship method for two numbers, which extends EA to find the GCD and Bézout’s coefficients of numbers, not just two.
5.1. Example
Let’s reuse the example for REEA. Here, we compute the coefficients as we perform Euclidean divisions. The first remainder, , is a direct linear combination of
and
:
Next, we divide with
. Then, we express the remainder
as a linear combination of
and
and replace
with the expression we got in the previous step:
We obtain the coefficients by repeating the step. After each division step, we express the remainder in terms of the current dividend and the divisor. Since both have appeared as remainders previously, we replace them with the corresponding linear combinations and simplify the expressions:
We get the same result as with REEA in the end, but without recursion. Generally, the iterative variant should be faster because it avoids recursive calls and keeps the same frame.
5.2. Speeding up the Algorithm
As we see from the recurrences (10), the -coefficients and
-coefficients don’t depend on one another. Moreover, from the final form:
we can calculate the final if we know the final
:
and the other way around. So, there’s no need to compute both coefficients as we make division steps. That cuts the number of operations by a third.
6. How Many Coefficients Are There?
Bézout’s coefficients are not unique, In fact, if is one pair of Bézout’s coefficients for
and
, then all the coefficients are of the form:
(11)
where .
Only two pairs satisfy:
(12)
and EEA always finds one such pair.
7. Conclusion
In this article, we presented the recursive and iterative forms of the Extended Euclidean Algorithm. It’s used for finding Bézout’s coefficients of two integer numbers and has applications in cryptography.