En aritmética e programación informática, o **algoritmo de Euclides estendido** é unha extensión do algoritmo de Euclides que calcula, alén do máximo común divisor (mcd) dos números enteiros *a* e *b*, tamén os coeficientes da identidade de Bézout, que son números enteiros *x* e *y* tal que

{\displaystyle ax+by=\gcd(a,b)}.
E sendo a e b positivos, un de x ou y é negativo.

O algoritmo de Euclides estendido é particularmente útil cando *a* e *b* son coprimos. Con esa condición temos que *x* é o inverso multiplicativo modular de *a* módulo *b*, e *y* é o inverso multiplicativo modular de *b* módulo *a*. 

Do mesmo xeito, o algoritmo de Euclides polinómico estendido permite calcular o inverso multiplicativo en extensións de campos alxébricos e, en particular, en corpos finitos de orde non prima. 

Cun algoritmo moi similar podemos calcular o máximo común divisor polinómico e os coeficientes da identidade de Bézout de dous polinomios dunha variable.

Descrición
----------

O algoritmo de Euclides estándar son unha sucesión de divisións cuxos cocientes non se utilizan. Só se usan os *restos*. Para o algoritmo estendido tamén fan falta os sucesivos cocientes. 

{\displaystyle {\begin{aligned}r\_{0}&=a&r\_{1}&=b\\s\_{0}&=1&s\_{1}&=0\\t\_{0}&=0&t\_{1}&=1\\&\,\,\,\vdots &&\,\,\,\vdots \\r\_{i+1}&=r\_{i-1}-c\_{i}r\_{i}&{\text{e }}0&\leq r\_{i+1}<|r\_{i}|&{\text{(isto define }}c\_{i}{\text{)}}\\s\_{i+1}&=s\_{i-1}-c\_{i}s\_{i}\\t\_{i+1}&=t\_{i-1}-c\_{i}t\_{i}\\&\,\,\,\vdots \end{aligned}}}
O algoritmo de Euclides estendido procede de xeito similar, mais engade outras dúas secuencias {\displaystyle s\_{i},t\_{i}}, sendo {\displaystyle c\_{i}} os cocientes e {\displaystyle r\_{i}} os restos como segue:

O cálculo tamén se detén cando {\displaystyle r\_{k+1}=0} e dá

* {\displaystyle r\_{k}} é o máximo común divisor da entrada {\displaystyle a=r\_{0}} e {\displaystyle b=r\_{1}.}
* Os coeficientes de Bézout son {\displaystyle s\_{k}} e {\displaystyle t\_{k},} é dicir {\displaystyle \gcd(a,b)=r\_{k}=as\_{k}+bt\_{k}}
* Os cocientes de *a* e *b* polo seu máximo común divisor veñen dados por {\displaystyle s\_{k+1}=\pm {\frac {b}{\gcd(a,b)}}} e {\displaystyle t\_{k+1}=\pm {\frac {a}{\gcd(a,b)}}}

A maiores, se *a* e *b* son ambos os dous positivos e {\displaystyle \gcd(a,b)\neq \min(a,b)}, daquela

{\displaystyle |s\_{i}|\leq \left\lfloor {\frac {b}{2\gcd(a,b)}}\right\rfloor \quad {\text{e}}\quad |t\_{i}|\leq \left\lfloor {\frac {a}{2\gcd(a,b)}}\right\rfloor }
para {\displaystyle 0\leq i\leq k,} onde {\displaystyle \lfloor x\rfloor } denota a parte enteira de x, é dicir, o maior enteiro non maior que x.

Isto implica que o par de coeficientes de Bézout proporcionado polo algoritmo de Euclides estendido é o *par mínimo* de coeficientes de Bézout, xa que é o único par que satisfai ambas as desigualdades anteriores.

A continuación un exemplo pode clarificar.

### Exemplo

A seguinte táboa mostra como funciona o algoritmo de Euclides estendido coas entradas 240 e 46. O máximo común divisor é a última entrada distinta de cero, 2 na columna "resto". O cálculo detense na fila 6, porque o resto é 0. Os coeficientes de Bézout aparecen nas dúas últimas entradas da penúltima fila. De feito, é doado verificar que -9 {\displaystyle \cdot } 240 + 47 {\displaystyle \cdot } 46 = 2. Finalmente, as dúas últimas entradas 23 e 120 da última fila son, ata o signo, os cocientes da entrada 46 e 240 polo máximo común divisor 2.

| índice *i* | cociente ci−1 | Resto ri | si | ti |
| --- | --- | --- | --- | --- |
| 0 |  | 240 | 1 | 0 |
| 1 |  | 46 | 0 | 1 |
| 2 | 240 ÷ 46 = 5 | 240 − 5 × 46 = 10 | 1 − 5 × 0 = 1 | 0 − 5 × 1 = −5 |
| 3 | 46 ÷ 10 = 4 | 46 − 4 × 10 = 6 | 0 − 4 × 1 = −4 | 1 − 4 × −5 = 21 |
| 4 | 10 ÷ 6 = 1 | 10 − 1 × 6 = 4 | 1 − 1 × −4 = 5 | −5 − 1 × 21 = −26 |
| 5 | 6 ÷ 4 = 1 | 6 − 1 × 4 = 2 | −4 − 1 × 5 = −9 | 21 − 1 × −26 = 47 |
| 6 | 4 ÷ 2 = 2 | 4 − 2 × 2 = 0 | 5 − 2 × −9 = 23 | −26 − 2 × 47 = −120 |

A maiores, os cocientes, en azul, son os coeficientes da fracción continua de 240/46 = [5, 4, 1, 1, 2].

Algoritmo polinómico de Euclides estendido
------------------------------------------

Para polinomios dunha variable con coeficientes nun corpo, todo funciona de xeito similar, división euclidiana, identidade de Bézout e algoritmo de Euclides estendido. A primeira diferenza é que, na división de Euclides e no algoritmo, a desigualdade {\displaystyle 0\leq r\_{i+1}<|r\_{i}|} ten que ser substituída por unha desigualdade nos graos do polinomio {\displaystyle \deg r\_{i+1}<\deg r\_{i}.} Para o demais, todo o que precede neste artigo segue sendo o mesmo, simplemente substituíndo os enteiros por polinomios.

Unha segunda diferenza reside no límite do tamaño dos coeficientes de Bézout proporcionados polo algoritmo, que é máis preciso no caso polinómico, o que leva ao seguinte teorema.

En matemáticas, é común esixir que o máximo común divisor sexa un polinomio mónico. Para conseguir isto, abonda con dividir cada elemento da saída polo coeficiente principal de {\displaystyle r\_{k}.} Isto permite que, se *a* e *b* son coprimos, se obtén 1 no lado dereito da desigualdade de Bézout. En caso contrario, pódese obter calquera constante distinta de cero.

  

*Se a e b son dous polinomios distintos de cero, entón o algoritmo de Euclides estendido produce o único par de polinomios* (*s*, *t*) *tal que*

{\displaystyle as+bt=\gcd(a,b)}
O algoritmo de Euclides estendido é a ferramenta esencial para calcular inversos multiplicativos en estruturas modulares, normalmente os enteiros modulares e as extensións de campos alxébricos. Un exemplo notable deste último caso son os corpos finitos de orde non prima.

{\displaystyle \deg s<\deg b-\deg(\gcd(a,b)),\quad \deg t<\deg a-\deg(\gcd(a,b)).}
Unha terceira diferenza é que, no caso polinómico, o máximo común divisor defínese só ata a multiplicación por unha constante distinta de cero. Hai varias formas de definir sen ambigüidades un máximo común divisor.

{\displaystyle \gcd(a\_{1},a\_{2},\dots ,a\_{n})=\gcd(a\_{1},\,\gcd(a\_{2},\,\gcd(a\_{3},\dots ,\gcd(a\_{n-1}\,,a\_{n}))),\dots ),}

Cálculo de inversos multiplicativos en aritmética modular
---------------------------------------------------------

### Números enteiros modulares

Un elemento *a* do anel **Z**/*n***Z** ten un inverso multiplicativo (é dicir, é unha unidade) se é coprimo con *n*. En particular, se *n* é primo, *a* ten un inverso multiplicativo se non é cero (módulo *n*). Así, **Z**/*n***Z** é un corpo se e só se *n* é primo.

A identidade de Bézout afirma que *a* e *n* son primos primos se e só se existen números enteiros *s* e *t* tal que

{\displaystyle ns+at=1}
Reducindo esta identidade módulo *n* dáse

{\displaystyle at\equiv 1\mod n.}
Así *t*, ou, máis exactamente, o resto da división de *t* por *n*, é o inverso multiplicativo de *a* módulo *n*.

### Extensións simples de campos alxébricos

#### Exemplo

Por exemplo, se o polinomio usado para definir o campo finito GF(28) é *p* = *x*8 + *x*4 + *x*3 + *x* + 1, e *a* = *x*6 + *x*4 + *x* + 1 é o elemento cuxo inverso se desexa, entón a realización do algoritmo dá como resultado o cálculo descrito na seguinte táboa embaixo. Lembremos que en corpos de orde 2*n*, un ten − *z* = *z* e *z* + *z* = 0 para cada elemento *z* do campo). Temos que 1 é o único elemento distinto de cero en GF(2).

| paso | cociente | r | s | t |
| --- | --- | --- | --- | --- |
|  |  | *p* = *x*8 + *x*4 + *x*3 + *x* + 1 | 1 | 0 |
|  |  | *a* = *x*6 + *x*4 + *x* + 1 | 0 | 1 |
| 1 | *x*2 + 1 | *x*2 = *p* − *a* (*x*2 + 1) | 1 | *x*2 + 1 = 0 − 1 · (*x*2 + 1) |
| 2 | *x*4 + *x*2 | *x* + 1 = *a* − *x*2 (*x*4 + *x*2) | *x*4+*x*2 = 0 − 1(*x*4+*x*2) | *x*6 + *x*2 + 1 = 1 − (*x*4 + *x*2) (*x*2 + 1) |
| 3 | *x* + 1 | 1 = *x*2 − (*x* + 1) (*x* + 1) | *x*5+*x*4+*x*3+*x*2+1 = 1 − (*x* +1)(*x*4 + *x*2) | *x*7 + *x*6 + *x*3 + *x* = (*x*2 + 1) − (*x* + 1) (*x*6 + *x*2 + 1) |
| 4 | *x* + 1 | 0 = (*x* + 1) − 1 × (*x* + 1) | *x*6 + *x*4 + *x* + 1 = (*x*4+*x*2) − (*x*+1)(*x*5+*x*4+*x*3+*x*2+1) |  |

Así, o inverso é *x*7 + *x*6 + *x*3 + *x*, como se pode confirmar multiplicando os dous elementos xuntos e tomando o resto por p do resultado.

O caso de máis de dous números
------------------------------

Pódese manexar o caso de máis de dous números de forma iterativa. 

{\displaystyle \gcd(a\_{1},a\_{2},\dots ,a\_{n})=\gcd(a\_{1},\,\gcd(a\_{2},\,\gcd(a\_{3},\dots ,\gcd(a\_{n-1}\,,a\_{n}))),\dots ),}

Notas
-----

Véxase tamén
------------

### Bibliografía

* Knuth, Donald. *The Art of Computer Programming*. Addison-Wesley.  Volume 2, Chapter 4.
* Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. *Introduction to Algorithms*, Second Edition. MIT Press and McGraw-Hill, 2001. ISBN 0-262-03293-7. Pages 859–861 of section 31.2: Greatest common divisor.

### Outros artigos

* Dominio euclidiano
* Teorema chinés do resto
* Multiplicativo inverso modular

### Ligazóns externas

* Source for the form of the algorithm used to determine the multiplicative inverse in GF(2^8)