71
$\begingroup$

I've only found a recursive algorithm of the extended Euclidean algorithm. I'd like to know how to use it by hand. Any idea?

  • 3
    I'm not sure what you mean. The Extended Euclidean Algorithm is inherently recursive. When you use it by hand, you use it recursively.2011-11-26
  • 0
    Maybe you can have a look at this question: http://math.stackexchange.com/questions/20717/how-to-find-solutions-of-linear-diophantine-ax-by-c2011-11-26
  • 0
    Have you seen [this blurb](http://www.math.uconn.edu/~kconrad/blurbs/ugradnumthy/divgcd.pdf) by KCd?2011-11-26
  • 0
    If you're looking for help working out examples by hand, you may find [this](http://www.math.umn.edu/~garrett/crypto/a01/Euclid.html) helpful. I certainly find it helpful when writing tests or homework assignments :)2011-11-26
  • 2
    @Andrew, thanks for taking the time to accept answers in your old questions.2011-11-26
  • 0
    See [this question](http://math.stackexchange.com/questions/67969/linear-diophantine-equation-100x-23y-19/1284131#1284131) for a discussion of the Euclid Wallace algorithm.2015-05-15

4 Answers 4

63

Perhaps the easiest way to do it by hand is in analogy to Gaussian elimination or triangularization, except that, since the coefficient ring is not a field, one has to use the division / Euclidean algorithm to iteratively descrease the coefficients till zero. In order to compute both $\rm\,gcd(a,b)\,$ and its Bezout linear representation $\rm\,j\,a+k\,b,\,$ we keep track of such linear representations for each remainder in the Euclidean algorithm, starting with the trivial representation of the gcd arguments, e.g. $\rm\: a = 1\cdot a + 0\cdot b.\:$ In matrix terms, this is achieved by augmenting (appending) an identity matrix that accumulates the effect of the elementary row operations. Below is an example that computes the Bezout representation for $\rm\:gcd(80,62) = 2,\ $ i.e. $\ 7\cdot 80\: -\: 9\cdot 62\ =\ 2\:.\:$ See this answer for a proof and for conceptual motivation of the ideas behind the algorithm (see the Remark below if you are not familiar with row operations from linear algebra).

For example, to solve  m x + n y = gcd(m,n) one begins with
two rows  [m   1    0], [n   0    1], representing the two
equations  m = 1m + 0n,  n = 0m + 1n. Then one executes
the Euclidean algorithm on the numbers in the first column,
doing the same operations in parallel on the other columns,

Here is an example:  d =  x(80) + y(62)  proceeds as:

                      in equation form   | in row form
                    ---------------------+------------
                    80 =   1(80) + 0(62) | 80   1   0
                    62 =   0(80) + 1(62) | 62   0   1
 row1 -   row2  ->  18 =   1(80) - 1(62) | 18   1  -1
 row2 - 3 row3  ->   8 =  -3(80) + 4(62) |  8  -3   4
 row3 - 2 row4  ->   2 =   7(80) - 9(62) |  2   7  -9
 row4 - 4 row5  ->   0 = -31(80) +40(62) |  0 -31  40

The row operations above are those resulting from applying
the Euclidean algorithm to the numbers in the first column,

        row1 row2 row3 row4 row5
namely:  80,  62,  18,   8,   2  = Euclidean remainder sequence
               |    |
for example   62-3(18) = 8, the 2nd step in Euclidean algorithm

becomes:   row2 -3 row3 = row4  when extended to all columns.

In effect we have row-reduced the first two rows to the last two.
The matrix effecting the reduction is in the bottom right corner.
It starts as 1, and is multiplied by each elementary row operation, 
hence it accumulates the product of all the row operations, namely:

$$ \left[ \begin{array}{ccc} 7 & -9\\ -31 & 40\end{array}\right ] \left[ \begin{array}{ccc} 80 & 1 & 0\\ 62 & 0 & 1\end{array}\right ] \ =\ \left[ \begin{array}{ccc} 2\ & \ \ \ 7\ & -9\\ 0\ & -31\ & 40\end{array}\right ] \qquad\qquad\qquad\qquad\qquad $$

Notice row 1 is the particular  solution  2 =   7(80) -  9(62)
Notice row 2 is the homogeneous solution  0 = -31(80) + 40(62),
so the general solution is any linear combination of the two:

       n row1 + m row2  ->  2n = (7n-31m) 80 + (40m-9n) 62

The same row/column reduction techniques tackle arbitrary
systems of linear Diophantine equations. Such techniques
generalize easily to similar coefficient rings possessing a
Euclidean algorithm, e.g. polynomial rings F[x] over a field, 
Gaussian integers Z[i]. There are many analogous interesting
methods, e.g. search on keywords: Hermite / Smith normal form, 
invariant factors, lattice basis reduction, continued fractions,
Farey fractions / mediants, Stern-Brocot tree / diatomic sequence.   

Remark $ $ Below I elaborate on the row operations to help readers unfamiliar with linear algebra.

Let $\,r_i\,$ be the Euclidean remainder sequence. Above $\, r_1,r_2,r_3\ldots = 80,62,18\ldots$ Given linear combinations $\,r_j = a_j m + b_j n\,$ for $\,r_{i-1}\,$ and $\,r_i\,$ we can calculate a linear combination for $\,r_{i+1} := r_{i-1}\bmod r_i = r_{i-1} - q_i r_i\,$ by substituting said combinations for $\,r_{i-1}\,$ and $\,r_i,\,$ i.e.

$$\begin{align} r_{i+1}\, &=\, \overbrace{a_{i-1} m + a_{i-1}n}^{\Large r_{i-1}}\, -\, q_i \overbrace{(a_i m + b_i n)}^{\Large r_i}\\[.3em] {\rm i.e.}\quad \underbrace{r_{i-1} - q_i r_i}_{\Large r_{i+1}}\, &=\, (\underbrace{a_{i-1}-q_i a_i}_{\Large a_{i+1}})\, m\, +\, (\underbrace{b_{i-1} - q_i b_i}_{\Large b_{i+1}})\, n \end{align}$$

Thus the $\,a_i,b_i\,$ satisfy the same recurrence as the remainders $\,r_i,\,$ viz. $\,f_{i+1} = f_{i-1}-q_i f_i.\,$ This implies that we can carry out the recurrence in parallel on row vectors $\,[r_i,a_i,b_i]$ representing the equation $\, r_i = a_i m + b_i n\,$ as follows

$$\begin{align} [r_{i+1},a_{i+1},b_{i+1}]\, &=\, [r_{i-1},a_{i-1},b_{i-1}] - q_i [r_i,a_i,b_i]\\ &=\, [r_{i-1},a_{i-1},b_{i-1}] - [q_i r_i,q_i a_i, q_i b_i]\\ &=\, [r_{i-1}-q_i r_i,\ a_{i-1}-q_i a_i,\ b_{i-1}-b_i r_i] \end{align}$$

which written in the tabular format employed far above becomes

$$\begin{array}{ccc} &r_{i-1}& a_{i-1} & b_{i-1}\\ &r_i& a_i &b_i\\ \rightarrow\ & \underbrace{r_{i-1}\!-q_i r_i}_{\Large r_{i+1}} &\underbrace{a_{i-1}\!-q_i a_i}_{\Large a_{i+1}}& \underbrace{b_{i-1}-q_i b_i}_{\Large b_{i+1}} \end{array}$$

Thus the extended Euclidean step is: compute the quotient $\,q_i = \lfloor r_{i-1}/r_i\rfloor$ then multiply row $i$ by $q_i$ and subtract it from row $i\!-\!1.$ Said componentwise: in each column $\,r,a,b,\,$ multiply the $i$'th entry by $q_i$ then subtract it from the $i\!-\!1$'th entry, yielding the $i\!+\!1$'th entry. If we ignore the 2nd and 3rd columns $\,a_i,b_i$ then this is the usual Euclidean algorithm. The above extends this algorithm to simultaneously compute the representation of each remainder as a linear combination of $\,m,n,\,$ starting from the obvious initial representations $\,m = 1(m)+0(n),\,$ and $\,n = 0(m)+1(n).\,$

  • 5
    [See here](http://math.stackexchange.com/a/163118/242) for an example in $\rm\color{#940}{TeX}\color{#C00}{ni}\color{#0A0}{color}.\ \ $2012-06-28
  • 1
    [Sometimes](http://math.stackexchange.com/a/398356/242) this is called the Euclid-Wallis algorithm, but I am not sure that is historically correct.2013-12-23
  • 0
    See [this answer](http://math.stackexchange.com/a/2053174/242) for a *fraction* form of the Extended Euclidean Algorithm2017-01-18
  • 0
    Bill, by doing the euclidian algorithm I got 80,62,18,8,2,0. As 80,62 are the building blocks, all these numbers will be written in the form x(80)+y(62), for 80 and 62 it is easy to find the x and the y, But I didn't undertand what You did to get the x and y for the other numbers.2017-08-12
  • 1
    @hjy As described above, we need to perform the algorithm on the *entire* row or equation, e.g. as I show above the Euclidean step $\ 62\color{#c00}{-3}(18) = 8\ $ becomes $\ [62, 0, 1]\color{#c00}{- 3}[18,1,-1] = [8,-3,4],\,$ when performed on the augmented rows or, performed on the equations, it is $$\begin{align} 62\, &=\ \ \ 0(80) + 1(62)\\ \color{#c00}{- 3}\,(18\, &=\ \ \ 1(80) + 1(62))\\ \rightarrow\ \ \ 8\, &= -3(80)+4(62) \end{align}$$2017-08-12
  • 0
    I think I got what you did. You get the first 2 rows to get the following. for example row1 -x(row2) = row3, If I do the operation I will get the row 3, What I need to do is only operations with matrixes or another thing ?2017-08-12
  • 1
    @hjx The idea is: we attach to each remainder $r_i$ in the Euclidean remainder sequence a representation as a linear combination of the initial numbers $\,m,n,\,$ e.g. by attaching the combination as the RHS of an equation $\, r_i = a_i m + b_i n.\,$ In order to propagate these linear combinations to the next remainder in the sequence, we simply extend the Euclidean operation to the linear combinations too, i.e. to the RHS of the equations in my prior comment.2017-08-12
  • 1
    So we end up adding and subtracting ($\rm\color{#c00}{scaled}$) *equations* (vs. *numbers* = remainders).The vector or row notation is just an abbreviation of these equations (which will be natural if one knows linear algebra). But I avoided much use of linear algebra in order to keep the answer accessible to readers who have not yet studied linear algebra.2017-08-12
  • 0
    I think I better do it by back substitution, I didn't learn linear algebra yet, I was really interested in solving diophantine equations by using this, but even so thanks for the help.2017-08-12
  • 1
    @hjx It is much easier than back substitution, and you needn't know any linear algebra. If you can tell me *precisely* what is not clear then I can elaborate.2017-08-12
  • 1
    @hjx I added a Remark to the answer which explains in more detail the row operations used in the *extended* Euclidean step. Is it clear now?2017-08-12
  • 0
    Yes \o/, Thank you for your patience and for the great help.2017-08-12
  • 0
    Is it possible to find the gcd of 3 numbers with this method ? I'm reading a book and it talks about a method called Blankinship's method that can computer the gcd of more than 3 numbers, but it does exactly the same thing as you did in your post, however It shows the method with 2 numbers, I found a link that shows that method with 3 but It isn't the same thing.2017-08-15
  • 1
    @hjx Yes, it works for arbitrarily many numbers, and there are many variations on the basic idea, i.e for descent we can replace any gcd argument by its remainder mod a smaller argument (or subtract any linear combination of the others that yields a smaller magnitude value). When using the above tabular format for many arguments we need to keep track of which element was replaced (e.g. cross it out)2017-08-15
  • 0
    What is happening [here](https://thenoteboo.wordpress.com/2015/12/03/blankinships-method/) is the same thing you did with the difference that the rows are getting changed ?2017-08-15
  • 1
    @hjx Yes, it is essentially the same method except they keep track of the latest 3 rows in a matrix rather than the 3 most recent (non-crossed-out) elements in a list. That way is more work notationally since it repeats much. The (common) attribution to Blankenship 1963 is historically incorrect since these ideas are *very* old.2017-08-15
  • 0
    Could you please provide an example of how to get the gcd of 3 numbers ?2017-08-15
  • 0
    @hjx See e.g. [this answer](https://math.stackexchange.com/a/620958/242) and [this answer.](https://math.stackexchange.com/a/1978664/242). Generally you can find examples of my posts in the Linked Questions list.2017-08-15
11

This is more a comment on the method explained by Bill Dubuque then a proper answer in itself, but I think there is a remark so obvious that I don’t understand that it is hardly ever made in texts discussing the extended Euclidean algorithm. This is the observation that you can save yourself half of the work by computing only one of the Bezout coefficients. In other words, instead of recording for every new remainder $r_i$ a pair of coefficients $k_i,l_i$ so that $r_i=k_ia+l_ib$, you need to record only $k_i$ such that $r_i\equiv k_ia\pmod b$. Once you will have found $d=\gcd(a,b)$ and $k$ such that $d\equiv ka\pmod b$, you can then simply put $l=(d-ka)/b$ to get the other Bezout coefficient. This simplification is possible because the relation that gives the next pair of intermediate coefficients is perfectly independent for the two coefficients: say you have $$ \begin{aligned} r_i&=k_ia+l_ib\\ r_{i+1}&=k_{i+1}a+l_{i+1}b\end{aligned} $$ and Euclidean division gives $r_i=qr_{i+1}+r_{i+2}$, then in order to get $$ r_{i+2}=k_{i+2}a+l_{i+2}b $$ one can take $k_{i+2}=k_i-qk_{i+1}$ and $l_{i+2}=l_i-ql_{i+1}$, where the equation for $k_{i+2}$ does not need $l_i$ or $l_{i+1}$, so you can just forget about the $l$'s. In matrix form, the passage is from $$ \begin{pmatrix} r_i&k_i&l_i\\ r_{i+1}&k_{i+1}&l_{i+1}\end{pmatrix} \quad\text{to}\quad \begin{pmatrix} r_{i+2}&k_{i+2}&l_{i+2}\\ r_{i+1}&k_{i+1}&l_{i+1}\end{pmatrix} $$ by subtracting the second row $q$ times from the first, and it is clear that the last two columns are independent, and one might as well just keep the $r$'s and the $k$'s, passing from $$ \begin{pmatrix} r_i&k_i\\ r_{i+1}&k_{i+1}\end{pmatrix} \quad\text{to}\quad \begin{pmatrix} r_{i+2}&k_{i+2}\\ r_{i+1}&k_{i+1}\end{pmatrix} $$ instead.

A very minor drawback is that the relation $r_i=k_ia+l_ib$ that should hold for every row is maybe a wee bit easier to check by inspection than $r_i\equiv k_ia\pmod b$, so that computational errors could slip in a bit more easily. But really, I think that with some practice this method is just as safe and faster than computing both coefficients. Certainly when programming this on a computer there is no reason at all to keep track of both coefficients.

A final bonus it that in many cases where you apply the extended Euclidean algorithm you are only interested in one of the Bezout coefficients in the first place, which saves you the final step of computing the other one. One example is computing inverse modulo a prime number $p$: if you take $b=p$, and $a$ is not divisible by it, then you know beforehand that you will find $d=1$, and the coefficient $k$ such that $d\equiv ka\pmod p$ is just the inverse of $a$ modulo $p$ that you were after.

  • 0
    I just noticed your year-later answer. I usually perform this optimization by working with (modular) fractions, e.g. see [this answer.](http://math.stackexchange.com/a/2053174/242)2017-01-18
6

You may like to check this and this.

Also, there is a well known table method which is very easy and fast for the manual solution.

5

The way to do this is due to Blankinship "A New Version of the Euclidean Algorithm", AMM 70:7 (Sep 1963), 742-745. Say we want $a x + b y = \gcd(a, b)$, for simplicity with positive $a$, $b$ with $a > b$. Set up auxiliary vectors $(x_1, x_2, x_3)$, $(y_1, y_2, y_3)$ and $(t_1, t_2, t_3)$ and keep them such that we always have $x_1 a + x_2 b = x_3$, $y_1 a + y_2 b = y_3$, $t_1 a + t_2 b = t_3$ throughout. The algorithm itself is:

(x1, x2, x3) := (1, 0, a)
(y1, y2, y3) := (0, 1, b)
while y3 <> 0 do
    q := floor(x3 / y3)
    (t1, t2, t3) := (x1, x2, x3) - q * (y1, y2, y3)
    (x1, x2, x3) := (y1, y2, y3)
    (y1, y2, y3) := (t1, t2, t3)

At the end, $x_1 a + x_2 b = x3 = \gcd(a, b)$. It is seen that $x_3$, $y_3$ do as the classic Euclidean algorithm, and easily checked that the invariant mentioned is kept all the time.

One can do away with $x_2$, $y_2$, $t_2$ and recover $x_2$ at the end as $(x_3 - x_1 a) / b$.

  • 0
    That's the same method as in my answer, and it is *much* older than Blankinship's 1963 paper. Alas, I don't recall the historical details at the moment.2014-03-24
  • 0
    You might be asking about the Euclid Wallis algorithm. check out [***this***](http://math.stackexchange.com/questions/67969/linear-diophantine-equation-100x-23y-19/1284131#1284131) question2015-05-28