Está en la página 1de 11

Algoritmo de Euclides

Ir a la navegaci�nIr a la b�squeda
El algoritmo de Euclides es un m�todo antiguo y eficiente para calcular el m�ximo
com�n divisor (MCD). Fue originalmente descrito por Euclides en su obra Elementos.
El algoritmo de Euclides extendido es una ligera modificaci�n que permite adem�s
expresar al m�ximo com�n divisor como una combinaci�n lineal. Este algoritmo tiene
aplicaciones en diversas �reas como �lgebra, teor�a de n�meros y ciencias de la
computaci�n, entre otras. Con unas ligeras modificaciones suele ser utilizado en
computadoras electr�nicas debido a su gran eficiencia.

�ndice
1 Algoritmo original de Euclides
2 Algoritmo de Euclides tradicional
2.1 Generalizaci�n
2.2 Descripci�n formal
3 Algoritmo de Euclides extendido
3.1 Fundamentos
3.2 Descripci�n formal
4 Aplicaciones
4.1 Simplificar fracciones
4.2 Fracciones continuas
4.3 Inversos m�dulo m
5 Complejidad del algoritmo
6 Implementaci�n en pseudoc�digo
7 V�ase tambi�n
8 Referencias
9 Bibliograf�a
10 Enlaces externos
Algoritmo original de Euclides

AB y CD los segmentos conmensurables.

Ejemplo del algoritmo original de Euclides.


En la concepci�n griega de la matem�tica, los n�meros se entend�an como magnitudes
geom�tricas. Un tema recurrente en la geometr�a griega es el de la
conmensurabilidad de dos segmentos: dos segmentos (n�meros) AB y CD son
conmensurables cuando existe un tercer segmento PQ que cabe exactamente un n�mero
entero de veces en los primeros dos; es decir, PQ �mide� (mensura: medida) a los
segmentos AB y CD.

No cualquier par de segmentos es conmensurable, como encontraron los pitag�ricos


cuando establecen que el lado y la diagonal de un cuadrado no son conmensurables,
pero en el caso de dos segmentos conmensurables se desea hallar la mayor medida
com�n posible.

Euclides describe en la proposici�n VI I.2 de sus Elementos un m�todo que permite


hallar la mayor medida com�n posible de dos n�meros (segmentos) que no sean primos
entre s�, aunque de acuerdo a la �poca tal m�todo se explica en t�rminos
geom�tricos, lo que se ilustra en la siguiente transcripci�n.

Para encontrar la m�xima medida com�n de dos n�meros que no sean primos entre s�.

Euclides VII-2.svg
Sean AB y CD los dos n�meros que no son primos uno al otro. Se necesita entonces
encontrar la m�xima medida com�n de AB y CD.

Si CD mide AB entonces es una medida com�n puesto que CD se mide a s� mismo. Y es


manifiesto que tambi�n es la mayor medida pues nada mayor a CD puede medir a CD.
Pero si CD no mide a AB entonces alg�n n�mero quedar� de AB y CD, el menor siendo
continuamente restado del mayor y que medir� al n�mero que le precede. Porque una
unidad no quedar� pues si no es as�, AB y CD ser�n primos uno del otro [Prop.
VII.1], lo cual es lo contrario de lo que se supuso.

Por tanto, alg�n n�mero queda que medir� el n�mero que le precede. Y sea CD
midiendo BE dejando EA menor que s� mismo y sea EA midiendo DF dejando FC menor que
s� mismo y sea FC medida de AE. Entonces, como FC mide AE y AE mide DF, FC ser�
entonces medida de DF. Y tambi�n se mide a s� mismo. Por tanto tambi�n medir� todo
CD. Y CD mide a BE. Entonces CF mide a BE y tambi�n mide a EA. As� mide a todo BA y
tambi�n mide a CD. Esto es, CF mide tanto a AB y CD por lo que es una medida com�n
de AB y CD.

Afirmo que tambi�n es la mayor medida com�n posible porque si no lo fuera, entonces
un n�mero mayor que CF mide a los n�meros AB y CD, sea �ste G. Dado que G mide a CD
y CD mide a BE, G tambi�n mide a BE. Adem�s, mide a todo BA por lo que mide tambi�n
al residuo AE. Y AE mide a DF por lo que G tambi�n mide a DF. Mide tambi�n a todo
DC por lo que mide tambi�n al residuo CF, es decir el mayor mide al menor, lo cual
es imposible.

Por tanto, ning�n n�mero mayor a CF puede medir a los n�meros AB y CD. Entonces CF
es la mayor medida com�n de AB y CD, lo cual se quer�a demostrar.

Euclides. Elementos VII.2


En lenguaje moderno, el algoritmo se describe como sigue:

Dados dos segmentos AB y CD (con AB>CD), restamos CD de AB tantas veces como sea
posible. Si no hay residuo, entonces CD es la m�xima medida com�n.
Si se obtiene un residuo EA, �ste es menor que CD y podemos repetir el proceso:
restamos EA tantas veces como sea posible de CD. Si al final no queda un residuo,
EA es la medida com�n. En caso contrario obtenemos un nuevo residuo FC menor a EA.
El proceso se repite hasta que en alg�n momento no se obtiene residuo. Entonces el
�ltimo residuo obtenido es la mayor medida com�n.
El hecho de que los segmentos son conmesurables es clave para asegurar que el
proceso termina tarde o temprano

Algoritmo de Euclides tradicional


Al dividir {\displaystyle a} a entre {\displaystyle b} b (n�meros enteros), se
obtiene un cociente {\displaystyle q} q y un residuo {\displaystyle r} r. Es
posible demostrar que el m�ximo com�n divisor de {\displaystyle a} a y
{\displaystyle b} b es el mismo que el de {\displaystyle b} b y {\displaystyle r}
r. Sea c el m�ximo com�n divisor de {\displaystyle a} a y {\displaystyle b} b, como
{\displaystyle a=bq+r} {\displaystyle a=bq+r} y {\displaystyle c} c divide a
{\displaystyle a} a y a {\displaystyle b} b divide tambi�n a {\displaystyle r} r.
Si existiera otro n�mero mayor que {\displaystyle c} c que divide a {\displaystyle
b} b y a {\displaystyle r} r, tambi�n dividir�a a {\displaystyle a} a , por lo que
{\displaystyle c} c no ser�a el mcd de {\displaystyle a} a y {\displaystyle b} b,
lo que contradice la hip�tesis). �ste es el fundamento principal del algoritmo.
Tambi�n es importante tener en cuenta que el m�ximo com�n divisor de cualquier
n�mero {\displaystyle a} a y {\displaystyle 0} {\displaystyle 0} es precisamente
{\displaystyle a} a. Para fines pr�cticos, la notaci�n {\displaystyle \mathrm {mcd}
(a,b)} {\displaystyle \mathrm {mcd} (a,b)} significa m�ximo com�n divisor de
{\displaystyle a} a y {\displaystyle b} b.

Seg�n lo antes mencionado, para calcular el m�ximo com�n divisor de 2366 y 273 se
puede proseguir de la siguiente manera:

Paso Operaci�n Significado


1 2366 dividido entre 273 es 8 y sobran 182 {\displaystyle \mathrm {mcd}
(2366,273)=\mathrm {mcd} (273,182)} {\displaystyle \mathrm {mcd} (2366,273)=\mathrm
{mcd} (273,182)}
2 273 dividido entre 182 es 1 y sobran 91 {\displaystyle \mathrm {mcd}
(273,182)=\mathrm {mcd} (182,91)} {\displaystyle \mathrm {mcd} (273,182)=\mathrm
{mcd} (182,91)}
3 182 dividido entre 91 es 2 y sobra 0 {\displaystyle \mathrm {mcd}
(182,91)=\mathrm {mcd} (91,0)} {\displaystyle \mathrm {mcd} (182,91)=\mathrm {mcd}
(91,0)}
La secuencia de igualdades {\displaystyle \mathrm {mcd} (2366,273)=\mathrm {mcd}
(273,182)=\mathrm {mcd} (182,91)=\mathrm {mcd} (91,0)} {\displaystyle \mathrm {mcd}
(2366,273)=\mathrm {mcd} (273,182)=\mathrm {mcd} (182,91)=\mathrm {mcd} (91,0)}
implican que {\displaystyle \mathrm {mcd} (2366,273)=\mathrm {mcd} (91,0)}
{\displaystyle \mathrm {mcd} (2366,273)=\mathrm {mcd} (91,0)}. Dado que
{\displaystyle \mathrm {mcd} (91,0)=91} {\displaystyle \mathrm {mcd} (91,0)=91},
entonces se concluye que {\displaystyle \mathrm {mcd} (2366,273)=91} {\displaystyle
\mathrm {mcd} (2366,273)=91}. Este mismo procedimiento se puede aplicar a
cualesquiera dos n�meros naturales. En general, si se desea encontrar el m�ximo
com�n divisor de dos n�meros naturales {\displaystyle a} a y {\displaystyle b} b,
se siguen las siguientes reglas:

Si {\displaystyle b=0} {\displaystyle b=0} entonces {\displaystyle \mathrm {mcd}


(a,b)=a} {\displaystyle \mathrm {mcd} (a,b)=a} y el algoritmo termina
En otro caso, {\displaystyle \mathrm {mcd} (a,b)=\mathrm {mcd} (b,r)}
{\displaystyle \mathrm {mcd} (a,b)=\mathrm {mcd} (b,r)} donde {\displaystyle r} r
es el resto de dividir {\displaystyle a} a entre {\displaystyle b} b. Para calcular
{\displaystyle \mathrm {mcd} (b,r)} {\displaystyle \mathrm {mcd} (b,r)} se utilizan
estas mismas reglas
Asuma que llamamos {\displaystyle a=r_{0}} {\displaystyle a=r_{0}} y {\displaystyle
b=r_{1}} {\displaystyle b=r_{1}}. Aplicando estas reglas se obtiene la siguiente
secuencia de operaciones:

Paso Operaci�n Significado


1 {\displaystyle r_{0}} r_0 dividido entre {\displaystyle r_{1}} r_{1} es
{\displaystyle q_{1}} q_1 y sobran {\displaystyle r_{2}} r_{2} {\displaystyle
\mathrm {mcd} (r_{0},r_{1})=\mathrm {mcd} (r_{1},r_{2})} {\displaystyle \mathrm
{mcd} (r_{0},r_{1})=\mathrm {mcd} (r_{1},r_{2})}
2 {\displaystyle r_{1}} r_{1} dividido entre {\displaystyle r_{2}} r_{2} es
{\displaystyle q_{2}} q_{2} y sobran {\displaystyle r_{3}} {\displaystyle r_{3}}
{\displaystyle \mathrm {mcd} (r_{1},r_{2})=\mathrm {mcd} (r_{2},r_{3})}
{\displaystyle \mathrm {mcd} (r_{1},r_{2})=\mathrm {mcd} (r_{2},r_{3})}
3 {\displaystyle r_{2}} r_{2} dividido entre {\displaystyle r_{3}}
{\displaystyle r_{3}} es {\displaystyle q_{3}} {\displaystyle q_{3}} y sobran
{\displaystyle r_{4}} {\displaystyle r_{4}} {\displaystyle \mathrm {mcd}
(r_{2},r_{3})=\mathrm {mcd} (r_{3},r_{4})} {\displaystyle \mathrm {mcd}
(r_{2},r_{3})=\mathrm {mcd} (r_{3},r_{4})}
{\displaystyle \vdots } \vdots {\displaystyle \vdots } \vdots
{\displaystyle \vdots } \vdots
{\displaystyle n} n {\displaystyle r_{n-1}} {\displaystyle r_{n-1}} dividido
entre {\displaystyle r_{n}} r_{n} es {\displaystyle q_{n}} q_{n} y sobran
{\displaystyle r_{n+1}} {\displaystyle r_{n+1}} {\displaystyle \mathrm {mcd} (r_{n-
1},r_{n})=\mathrm {mcd} (r_{n},r_{n+1})} {\displaystyle \mathrm {mcd} (r_{n-
1},r_{n})=\mathrm {mcd} (r_{n},r_{n+1})}
{\displaystyle n+1} n+1 {\displaystyle r_{n}} r_{n} dividido entre {\displaystyle
r_{n+1}} {\displaystyle r_{n+1}} es {\displaystyle q_{n+1}} {\displaystyle q_{n+1}}
y sobra {\displaystyle 0} {\displaystyle 0} {\displaystyle \mathrm {mcd}
(r_{n},r_{n+1})=\mathrm {mcd} (r_{n+1},0)} {\displaystyle \mathrm {mcd}
(r_{n},r_{n+1})=\mathrm {mcd} (r_{n+1},0)}
Como la sucesi�n de residuos va disminuyendo, al final un residuo tiene que ser
cero y es en ese momento cuando el algoritmo termina. El m�ximo com�n divisor es
precisamente {\displaystyle r_{n+1}} {\displaystyle r_{n+1}} (el �ltimo residuo que
no es cero).

Generalizaci�n
En realidad el algoritmo de Euclides funciona no s�lo para los n�meros naturales,
sino para cualesquiera elementos en los que exista una "divisi�n con residuo". A
este tipo de divisiones se les llama divisiones euclidianas y a los conjuntos donde
se puede definir dicha divisi�n se les llama dominios eucl�deos. Por ejemplo, el
conjunto de los n�meros enteros y el de los polinomios con coeficientes racionales
son dominios eucl�deos porque podemos definir una divisi�n con residuo (v�ase
Divisi�n polinomial). De esta manera, se puede calcular el m�ximo com�n divisor de
dos n�meros enteros o de dos polinomios.

Por ejemplo, para calcular el m�ximo com�n divisor de los polinomios {\displaystyle
P(x)=x^{5}+2x^{3}+x} {\displaystyle P(x)=x^{5}+2x^{3}+x} y {\displaystyle
Q(x)=x^{4}-1} {\displaystyle Q(x)=x^{4}-1} el algoritmo de Euclides sugiere la
siguiente secuencia de operaciones:

Paso Operaci�n Significado


1 {\displaystyle x^{5}+2x^{3}+x} {\displaystyle x^{5}+2x^{3}+x} dividido entre
{\displaystyle x^{4}-1} {\displaystyle x^{4}-1} es {\displaystyle x} x y sobra
{\displaystyle 2x^{3}+2x} {\displaystyle 2x^{3}+2x} {\displaystyle \mathrm {mcd}
(x^{5}+2x^{3}+x,x^{4}-1)=\mathrm {mcd} (x^{4}-1,2x^{3}+2x)} {\displaystyle \mathrm
{mcd} (x^{5}+2x^{3}+x,x^{4}-1)=\mathrm {mcd} (x^{4}-1,2x^{3}+2x)}
2 {\displaystyle x^{4}-1} {\displaystyle x^{4}-1} dividido entre {\displaystyle
2x^{3}+2x} {\displaystyle 2x^{3}+2x} es {\displaystyle \textstyle {{\frac {1}
{2}}x}} {\displaystyle \textstyle {{\frac {1}{2}}x}} y sobra {\displaystyle -x^{2}-
1} {\displaystyle -x^{2}-1} {\displaystyle \mathrm {mcd} (x^{4}-
1,2x^{3}+2x)=\mathrm {mcd} (2x^{3}+2x,-x^{2}-1)} {\displaystyle \mathrm {mcd}
(x^{4}-1,2x^{3}+2x)=\mathrm {mcd} (2x^{3}+2x,-x^{2}-1)}
3 {\displaystyle 2x^{3}+2x} {\displaystyle 2x^{3}+2x} dividido entre
{\displaystyle -x^{2}-1} {\displaystyle -x^{2}-1} es {\displaystyle -2x}
{\displaystyle -2x} y sobra 0 {\displaystyle \mathrm {mcd} (2x^{3}+2x,-x^{2}-
1)=\mathrm {mcd} (-x^{2}-1,0)} {\displaystyle \mathrm {mcd} (2x^{3}+2x,-x^{2}-
1)=\mathrm {mcd} (-x^{2}-1,0)}
De esta manera se concluye que su m�ximo com�n divisor es {\displaystyle -x^{2}-1}
{\displaystyle -x^{2}-1}.

Descripci�n formal
Se puede expresar este algoritmo de manera m�s formal usando pseudoc�digo. En este
caso la expresi�n " {\displaystyle x\;{\bmod {\;}}y} {\displaystyle x\;{\bmod
{\;}}y}" significa "el residuo de dividir {\displaystyle x} x entre {\displaystyle
y} y" (v�ase Aritm�tica modular).

Algoritmo 1 de Euclides
Entrada: Valores {\displaystyle a} a y {\displaystyle b} b pertenecientes a un
dominio eucl�deo

Salida: Un m�ximo com�n divisor de {\displaystyle a} a y {\displaystyle b} b

{\displaystyle r_{0}\gets a} {\displaystyle r_{0}\gets a}, {\displaystyle


r_{1}\gets b} {\displaystyle r_{1}\gets b}
{\displaystyle i\gets 1} {\displaystyle i\gets 1}
Mientras {\displaystyle r_{i}\neq 0} {\displaystyle r_{i}\neq 0} haga lo siguiente:
{\displaystyle r_{i+1}\gets r_{i-1}\;{\bmod {\;}}r_{i}} {\displaystyle r_{i+1}\gets
r_{i-1}\;{\bmod {\;}}r_{i}}
{\displaystyle i\gets i+1} {\displaystyle i\gets i+1}
El resultado es: {\displaystyle r_{i-1}} {\displaystyle r_{i-1}}
Vale la pena notar que este algoritmo no es eficiente ser implementado directamente
en una computadora, ya que requerir�a memorizar todos los valores de {\displaystyle
r_{i}} {\displaystyle r_{i}}.

Algoritmo de Euclides extendido


El algoritmo de Euclides extendido permite, adem�s de encontrar un m�ximo com�n
divisor de dos n�meros enteros {\displaystyle a} a y {\displaystyle b} b,
expresarlo como la m�nima combinaci�n lineal de esos n�meros, es decir, encontrar
n�meros enteros {\displaystyle s} s y {\displaystyle t} t tales que
{\displaystyle \mathrm {mcd} (a,b)=as+bt} {\displaystyle \mathrm {mcd}
(a,b)=as+bt}. Esto se generaliza tambi�n hacia cualquier dominio euclideano.

Fundamentos
Existen varias maneras de explicar el algoritmo de Euclides extendido, una de las
m�s comunes consiste en la siguiente:

Usar el algoritmo tradicional de Euclides. En cada paso, en lugar de "


{\displaystyle a} a dividido entre {\displaystyle b} b es {\displaystyle q} q y de
resto {\displaystyle r} r" se escribe la ecuaci�n {\displaystyle a=bq+r}
{\displaystyle a=bq+r} (v�ase algoritmo de la divisi�n).
Se despeja el resto de cada ecuaci�n.
Se sustituye el resto de la �ltima ecuaci�n en la pen�ltima, y la pen�ltima en la
antepen�ltima y as� sucesivamente hasta llegar a la primera ecuaci�n, y en todo
paso se expresa cada resto como combinaci�n lineal.
Sin embargo, en aras de la comprensi�n y memorizaci�n de este algoritmo, es
conveniente conocer la siguiente caracterizaci�n. Para multiplicar dos matrices de
tama�o {\displaystyle 2\times 2} {\displaystyle 2\times 2} se usa la siguiente
f�rmula (v�ase Producto de matrices):

(1) {\displaystyle {\begin{bmatrix}e&f\\g&h\end{bmatrix}}\times


{\begin{bmatrix}a&b\\c&d\end{bmatrix}}={\begin{bmatrix}ea+fc&eb+fd\\ga+hc&gb+hd\end
{bmatrix}}} {\displaystyle {\begin{bmatrix}e&f\\g&h\end{bmatrix}}\times
{\begin{bmatrix}a&b\\c&d\end{bmatrix}}={\begin{bmatrix}ea+fc&eb+fd\\ga+hc&gb+hd\end
{bmatrix}}}

Sup�ngase que se utiliza el algoritmo de Euclides tradicional para calcular los


valores {\displaystyle q_{i}} {\displaystyle q_{i}} y {\displaystyle r_{i}}
{\displaystyle r_{i}} que ah� se describen. Por cada valor {\displaystyle q_{i}}
{\displaystyle q_{i}} calculado se puede formar la matriz {\displaystyle \textstyle
Q_{i}={\begin{bmatrix}0&1\\1&-q_{i}\end{bmatrix}}} {\displaystyle \textstyle
Q_{i}={\begin{bmatrix}0&1\\1&-q_{i}\end{bmatrix}}}. Usando la ecuaci�n (1) de
manera repetida se puede calcular el producto de las primeras {\displaystyle i} i
matrices de este tipo:

{\displaystyle
{\begin{bmatrix}s_{i}&t_{i}\\s_{i+1}&t_{i+1}\end{bmatrix}}={\begin{bmatrix}0&1\\1&-
q_{i}\end{bmatrix}}\times {\begin{bmatrix}0&1\\1&-q_{i-1}\end{bmatrix}}\times
\cdots \times {\begin{bmatrix}0&1\\1&-q_{1}\end{bmatrix}}} {\displaystyle
{\begin{bmatrix}s_{i}&t_{i}\\s_{i+1}&t_{i+1}\end{bmatrix}}={\begin{bmatrix}0&1\\1&-
q_{i}\end{bmatrix}}\times {\begin{bmatrix}0&1\\1&-q_{i-1}\end{bmatrix}}\times
\cdots \times {\begin{bmatrix}0&1\\1&-q_{1}\end{bmatrix}}}

Resulta ser que los valores {\displaystyle s_{i}} {\displaystyle s_{i}} y


{\displaystyle t_{i}} {\displaystyle t_{i}} tienen la propiedad de que
{\displaystyle r_{i}=as_{i}+bt_{i}} {\displaystyle r_{i}=as_{i}+bt_{i}}, es decir,
expresan a {\displaystyle r_{i}} {\displaystyle r_{i}} como una combinaci�n lineal
de {\displaystyle a} a y {\displaystyle b} b. Particularmente, como
{\displaystyle \mathrm {mcd} (a,b)=r_{n+1}} {\displaystyle \mathrm {mcd}
(a,b)=r_{n+1}} entonces se tiene {\displaystyle \mathrm {mcd}
(a,b)=as_{n+1}+bt_{n+1}} {\displaystyle \mathrm {mcd} (a,b)=as_{n+1}+bt_{n+1}}, lo
cual es la soluci�n del problema. Esta propiedad no deber�a ser sorprendente, pues
esta multiplicaci�n de matrices equivale al m�todo antes descrito donde se
substituye cada ecuaci�n en la anterior. Es importante calcular {\displaystyle
Q_{i}\times \cdots \times Q_{3}\times Q_{2}\times Q_{1}} {\displaystyle Q_{i}\times
\cdots \times Q_{3}\times Q_{2}\times Q_{1}} en ese mismo orden. La matriz
{\displaystyle Q_{1}} Q_1 aparece en el extremo derecho y la matriz {\displaystyle
Q_{i}} Q_i en el izquierdo.

Regresando al primer ejemplo, la sucesi�n de cocientes es {\displaystyle q_{1}=8}


{\displaystyle q_{1}=8}, {\displaystyle q_{2}=1} {\displaystyle q_{2}=1} y
{\displaystyle q_{3}=2} {\displaystyle q_{3}=2}. Entonces se puede calcular

{\displaystyle {\begin{bmatrix}-1&9\\3&-26\end{bmatrix}}={\begin{bmatrix}0&1\\1&-
2\end{bmatrix}}\times {\begin{bmatrix}0&1\\1&-1\end{bmatrix}}\times
{\begin{bmatrix}0&1\\1&-8\end{bmatrix}}} {\displaystyle {\begin{bmatrix}-1&9\\3&-
26\end{bmatrix}}={\begin{bmatrix}0&1\\1&-2\end{bmatrix}}\times
{\begin{bmatrix}0&1\\1&-1\end{bmatrix}}\times {\begin{bmatrix}0&1\\1&-
8\end{bmatrix}}}

Utilizando el primer rengl�n de esta matriz se puede leer que {\displaystyle


91=2366(-1)+273(9)} {\displaystyle 91=2366(-1)+273(9)}, es decir, se ha encontrado
la manera de expresar al m�ximo com�n divisor de 2366 y 273 como una combinaci�n
lineal.

Descripci�n formal
Para expresar el algoritmo de Euclides extendido es conveniente notar la manera en
que se calculan los valores {\displaystyle s_{i}} {\displaystyle s_{i}} y
{\displaystyle t_{i}} {\displaystyle t_{i}} con la multiplicaci�n de matrices:

{\displaystyle
{\begin{bmatrix}s_{i}&t_{i}\\s_{i+1}&t_{i+1}\end{bmatrix}}={\begin{bmatrix}s_{i}&t_
{i}\\s_{i-1}-q_{i}s_{i}&t_{i-1}-q_{i}t_{i}\end{bmatrix}}={\begin{bmatrix}0&1\\1&-
q_{i}\end{bmatrix}}\times {\begin{bmatrix}s_{i-1}&t_{i-
1}\\s_{i}&t_{i}\end{bmatrix}}} {\displaystyle
{\begin{bmatrix}s_{i}&t_{i}\\s_{i+1}&t_{i+1}\end{bmatrix}}={\begin{bmatrix}s_{i}&t_
{i}\\s_{i-1}-q_{i}s_{i}&t_{i-1}-q_{i}t_{i}\end{bmatrix}}={\begin{bmatrix}0&1\\1&-
q_{i}\end{bmatrix}}\times {\begin{bmatrix}s_{i-1}&t_{i-
1}\\s_{i}&t_{i}\end{bmatrix}}}

De esta manera {\displaystyle s_{i+1}=s_{i-1}-q_{i}s_{i}} {\displaystyle


s_{i+1}=s_{i-1}-q_{i}s_{i}} y adem�s {\displaystyle t_{i+1}=t_{i-1}-q_{i}t_{i}}
{\displaystyle t_{i+1}=t_{i-1}-q_{i}t_{i}}. Por lo tanto el algoritmo en
pseudoc�digo se puede expresar como sigue:

Algoritmo 2 de Euclides extendido


Entrada: Valores {\displaystyle a} a y {\displaystyle b} b pertenecientes a un
dominio eucl�deo

Salida: Un m�ximo com�n divisor de {\displaystyle a} a y {\displaystyle b} b, y


valores {\displaystyle s} s y {\displaystyle t} t tales que {\displaystyle \mathrm
{mcd} (a,b)=as+bt} {\displaystyle \mathrm {mcd} (a,b)=as+bt}

{\displaystyle r_{0}\gets a,r_{1}\gets b,s_{0}\gets 1,t_{0}\gets 0,s_{1}\gets


0,t_{1}\gets 1} {\displaystyle r_{0}\gets a,r_{1}\gets b,s_{0}\gets 1,t_{0}\gets
0,s_{1}\gets 0,t_{1}\gets 1}
{\displaystyle i\gets 1} i\gets 1
Mientras {\displaystyle r_{i}\neq 0} {\displaystyle r_{i}\neq 0} haga lo siguiente:
Divida {\displaystyle r_{i-1}} {\displaystyle r_{i-1}} entre {\displaystyle r_{i}}
{\displaystyle r_{i}} para obtener el cociente {\displaystyle q_{i}} {\displaystyle
q_{i}} y el residuo {\displaystyle r_{i+1}} {\displaystyle r_{i+1}}
{\displaystyle s_{i+1}\gets s_{i-1}-q_{i}s_{i}} {\displaystyle s_{i+1}\gets s_{i-
1}-q_{i}s_{i}}
{\displaystyle t_{i+1}\gets t_{i-1}-q_{i}t_{i}} {\displaystyle t_{i+1}\gets t_{i-
1}-q_{i}t_{i}}
{\displaystyle i\gets i+1} {\displaystyle i\gets i+1}
El resultado es: {\displaystyle r_{i-1}} {\displaystyle r_{i-1}} es un m�ximo com�n
divisor de {\displaystyle a} a y {\displaystyle b} b y se expresa {\displaystyle
r_{i-1}=as_{i-1}+bt_{i-1}} {\displaystyle r_{i-1}=as_{i-1}+bt_{i-1}}
Aplicaciones
Simplificar fracciones
Al momento de hacer c�lculos con fracciones, es de gran importancia saber c�mo
simplificarlas. Por ejemplo, la fracci�n {\displaystyle \textstyle {\frac {65}
{91}}} {\displaystyle \textstyle {\frac {65}{91}}} es equivalente con
{\displaystyle \textstyle {\frac {5}{7}}} {\displaystyle \textstyle {\frac {5}{7}}}
(v�ase N�mero racional). De manera m�s general, {\displaystyle \textstyle {\frac
{a}{b}}={\frac {ca}{cb}}} {\displaystyle \textstyle {\frac {a}{b}}={\frac {ca}
{cb}}} siempre que {\displaystyle c\neq 0} {\displaystyle c\neq 0}. Para reducir
una fracci�n cualquiera {\displaystyle \textstyle {\frac {a}{b}}} {\displaystyle
\textstyle {\frac {a}{b}}}, s�lo se necesita dividir {\displaystyle a} a y
{\displaystyle b} b entre su m�ximo com�n divisor.

Por ejemplo, si se desea reducir {\displaystyle \textstyle {\frac {166}{249}}}


{\displaystyle \textstyle {\frac {166}{249}}}, primero se usa el algoritmo de
Euclides para encontrar {\displaystyle \mathrm {mcd} (166,249)=83}
{\displaystyle \mathrm {mcd} (166,249)=83}. Se hacen las divisiones
{\displaystyle \textstyle 166\div 83=2} {\displaystyle \textstyle 166\div 83=2} y
{\displaystyle \textstyle 249\div 83=3} {\displaystyle \textstyle 249\div 83=3}.
Luego entonces se concluye que {\displaystyle \textstyle {\frac {166}{249}}={\frac
{2}{3}}} {\displaystyle \textstyle {\frac {166}{249}}={\frac {2}{3}}}.

Fracciones continuas
La sucesi�n de divisiones que se efect�an al seguir algoritmo de Euclides puede ser
utilizada para expresar una fracci�n cualquiera {\displaystyle \textstyle {\frac
{a}{b}}} {\displaystyle \textstyle {\frac {a}{b}}} como fracci�n continua. Esto se
debe a que si {\displaystyle a=bq+r} {\displaystyle a=bq+r} y {\displaystyle r\neq
0} {\displaystyle r\neq 0}, entonces

(3) {\displaystyle {\frac {a}{b}}=q+{\frac {1}{\frac {b}{r}}}} {\displaystyle


{\frac {a}{b}}=q+{\frac {1}{\frac {b}{r}}}}

Por ejemplo, para encontrar el m�ximo com�n divisor de {\displaystyle 93164}


{\displaystyle 93164} y {\displaystyle 5826} {\displaystyle 5826} el algoritmo
genera la siguiente secuencia de divisiones:

Paso Operaci�n Significado


1 93164 dividido entre 5826 es 15 y sobran 5774 {\displaystyle
93164=5826\times 15+5774} {\displaystyle 93164=5826\times 15+5774}
2 5826 dividido entre 5774 es 1 y sobran 52 {\displaystyle 5826=5774\times
1+52} {\displaystyle 5826=5774\times 1+52}
3 5774 dividido entre 52 es 111 y sobran 2 {\displaystyle 5774=52\times 111+2}
{\displaystyle 5774=52\times 111+2}
4 52 dividido entre 2 es 26 y sobra 0 {\displaystyle 52=2\times 26+0}
{\displaystyle 52=2\times 26+0}
Todas estas ecuaciones las podemos hacer parecidas a la ecuaci�n (3 3):

{\displaystyle \textstyle {\frac {93164}{5826}}=15+{\frac {1}{\frac {5826}{5774}}}}


{\displaystyle \textstyle {\frac {93164}{5826}}=15+{\frac {1}{\frac {5826}{5774}}}}
{\displaystyle \textstyle {\frac {5826}{5774}}=1+{\frac {1}{\frac {5774}{52}}}}
{\displaystyle \textstyle {\frac {5826}{5774}}=1+{\frac {1}{\frac {5774}{52}}}}
{\displaystyle \textstyle {\frac {5774}{52}}=111+{\frac {1}{\frac {52}{2}}}}
{\displaystyle \textstyle {\frac {5774}{52}}=111+{\frac {1}{\frac {52}{2}}}}
{\displaystyle \textstyle {\frac {52}{2}}=26} {\displaystyle \textstyle {\frac {52}
{2}}=26}
Si se sustituye la segunda ecuaci�n en la primera, se obtiene

{\displaystyle {\frac {93164}{5826}}=15+{\frac {1}{1+{\frac {1}{\frac {5774}


{52}}}}}} {\displaystyle {\frac {93164}{5826}}=15+{\frac {1}{1+{\frac {1}{\frac
{5774}{52}}}}}}

Si se repite este proceso de substituci�n entonces se obtiene la expresi�n deseada:

{\displaystyle {\frac {93164}{5826}}=15+{\frac {1}{1+{\frac {1}{111+{\frac {1}


{26}}}}}}} {\displaystyle {\frac {93164}{5826}}=15+{\frac {1}{1+{\frac {1}{111+
{\frac {1}{26}}}}}}}

De manera m�s general, la fracci�n continua encontrada con este algoritmo siempre
es de la forma

{\displaystyle {\frac {a}{b}}=q_{1}+{\frac {1}{q_{2}+{\frac {1}{q_{3}+{\frac {1}


{\ddots q_{n-1}+{\frac {1}{q_{n}}}}}}}}}} {\displaystyle {\frac {a}{b}}=q_{1}+
{\frac {1}{q_{2}+{\frac {1}{q_{3}+{\frac {1}{\ddots q_{n-1}+{\frac {1}
{q_{n}}}}}}}}}}

Inversos m�dulo m
Art�culo principal: Inverso multiplicativo (aritm�tica modular)
Decimos que dos n�meros enteros son congruentes m�dulo {\displaystyle m} m (aunque
tambi�n se puede generalizar para cualquier otro dominio eucl�deo) si al dividirlos
entre {\displaystyle m} m obtenemos el mismo residuo (v�ase Congruencia). Por
ejemplo, 7 es congruente con 12 m�dulo 5 porque al dividir 7 entre 5 y 12 entre 5,
en ambos casos obtenemos el mismo residuo (que es 2). Cuando {\displaystyle a} a es
congruente con {\displaystyle b} b m�dulo {\displaystyle m} m se escribe
{\displaystyle a\equiv b{\pmod {m}}} {\displaystyle a\equiv b{\pmod {m}}}, en el
ejemplo anterior se tiene {\displaystyle 7\equiv 12{\pmod {5}}} {\displaystyle
7\equiv 12{\pmod {5}}}. Sup�ngase que se conocen los valores de {\displaystyle a}
a, {\displaystyle b} b y {\displaystyle m} m, pero que se desconoce el valor
{\displaystyle x} x en la siguiente congruencia:

(2) {\displaystyle ax\equiv b{\pmod {m}}} {\displaystyle ax\equiv b{\pmod {m}}}

Basta encontrar un valor {\displaystyle a^{-1}} a^{{-1}} que satisfaga:


{\displaystyle a^{-1}a\equiv 1{\pmod {m}}} {\displaystyle a^{-1}a\equiv 1{\pmod
{m}}}, pues de esta manera al multiplicar la ecuaci�n (2) por {\displaystyle a^{-
1}} a^{{-1}} se tendr� la soluci�n deseada:

{\displaystyle x\equiv a^{-1}b{\pmod {m}}} {\displaystyle x\equiv a^{-1}b{\pmod


{m}}}

Al elemento {\displaystyle a^{-1}} a^{{-1}} se le llama "inverso m�dulo


{\displaystyle m} m" de {\displaystyle a} a. Desafortunadamente este valor no
siempre existe. Por ejemplo, con {\displaystyle a=4} {\displaystyle a=4} y
{\displaystyle m=6} {\displaystyle m=6} no existe ning�n n�mero entero
{\displaystyle a^{-1}} a^{{-1}} tal que {\displaystyle a^{-1}4\equiv 1{\pmod {6}}}
{\displaystyle a^{-1}4\equiv 1{\pmod {6}}}. De hecho este valor existe si y s�lo si
{\displaystyle \mathrm {mcd} (a,m)=1} {\displaystyle \mathrm {mcd} (a,m)=1} (la
existencia de soluciones depende de la condici�n {\displaystyle \mathrm {mcd}
(a,m)|b} {\displaystyle \mathrm {mcd} (a,m)|b}, mientras que la unicidad depende de
que el {\displaystyle \mathrm {mcd} (a,m)=1} {\displaystyle \mathrm {mcd}
(a,m)=1}). M�s a�n, si al usar el algoritmo de Euclides extendido (ahora con
{\displaystyle b=m} {\displaystyle b=m}) se obtiene {\displaystyle 1=as+mt}
{\displaystyle 1=as+mt}, entonces el valor {\displaystyle s} s es el inverso m�dulo
{\displaystyle m} m de {\displaystyle a} a. Por ejemplo, se desea resolver la
ecuaci�n

{\displaystyle 5x\equiv 2{\pmod {9}}} {\displaystyle 5x\equiv 2{\pmod {9}}}

Entonces con el algoritmo de Euclides extendido se obtiene que {\displaystyle


\mathrm {mcd} (5,9)=1=5(2)+9(-1)} {\displaystyle \mathrm {mcd} (5,9)=1=5(2)+9(-1)}.
Como {\displaystyle \mathrm {mcd} (5,9)=1} {\displaystyle \mathrm {mcd} (5,9)=1}
entonces 5 tiene un inverso m�dulo {\displaystyle 9} 9. M�s a�n, como
{\displaystyle 1=5(2)+9(-1)} {\displaystyle 1=5(2)+9(-1)}, entonces ese inverso es
2. Entonces

{\displaystyle x\equiv 2(2){\pmod {9}}} {\displaystyle x\equiv 2(2){\pmod {9}}}

Es decir que el valor de {\displaystyle x} x es {\displaystyle 4} {\displaystyle


4}.

Complejidad del algoritmo

Gr�fica del n�mero de divisiones efectuadas en el algoritmo de Euclides. El rojo


indica pocas operaciones, mientras que los colores eventualmente m�s azules
representan mayor n�mero de operaciones.
El teorema de Lam� afirma que el caso peor para este algoritmo es cuando se le pide
calcular el m�ximo com�n divisor de dos n�meros consecutivos de la sucesi�n de
Fibonacci. Por ejemplo, si se desea calcular el m�ximo com�n divisor de
{\displaystyle f_{10}=55} {\displaystyle f_{10}=55} y {\displaystyle f_{11}=89}
{\displaystyle f_{11}=89} se obtiene la siguiente secuencia de operaciones:

Paso Operaci�n Significado


1 89 dividido entre 55 es 1 y sobran 34 {\displaystyle \mathrm {mcd}
(89,55)=\mathrm {mcd} (55,34)} {\displaystyle \mathrm {mcd} (89,55)=\mathrm {mcd}
(55,34)}
2 55 dividido entre 34 es 1 y sobran 21 {\displaystyle \mathrm {mcd}
(55,34)=\mathrm {mcd} (34,21)} {\displaystyle \mathrm {mcd} (55,34)=\mathrm {mcd}
(34,21)}
3 34 dividido entre 21 es 1 y sobran 13 {\displaystyle \mathrm {mcd}
(34,21)=\mathrm {mcd} (21,13)} {\displaystyle \mathrm {mcd} (34,21)=\mathrm {mcd}
(21,13)}
4 21 dividido entre 13 es 1 y sobran 8 {\displaystyle \mathrm {mcd}
(21,13)=\mathrm {mcd} (13,8)} {\displaystyle \mathrm {mcd} (21,13)=\mathrm {mcd}
(13,8)}
5 13 dividido entre 8 es 1 y sobran 5 {\displaystyle \mathrm {mcd}
(13,8)=\mathrm {mcd} (8,5)} {\displaystyle \mathrm {mcd} (13,8)=\mathrm {mcd}
(8,5)}
6 8 dividido entre 5 es 1 y sobran 3 {\displaystyle \mathrm {mcd}
(8,5)=\mathrm {mcd} (5,3)} {\displaystyle \mathrm {mcd} (8,5)=\mathrm {mcd} (5,3)}
7 5 dividido entre 3 es 1 y sobran 2 {\displaystyle \mathrm {mcd}
(5,3)=\mathrm {mcd} (3,2)} {\displaystyle \mathrm {mcd} (5,3)=\mathrm {mcd} (3,2)}
8 3 dividido entre 2 es 1 y sobran 1 {\displaystyle \mathrm {mcd}
(3,2)=\mathrm {mcd} (2,1)} {\displaystyle \mathrm {mcd} (3,2)=\mathrm {mcd} (2,1)}
9 2 dividido entre 1 es 2 y sobra 0 {\displaystyle \mathrm {mcd}
(2,1)=\mathrm {mcd} (1,0)} {\displaystyle \mathrm {mcd} (2,1)=\mathrm {mcd} (1,0)}
En este ejemplo se observa que con estos dos n�meros de dos d�gitos decimales, se
necesita hacer 9 divisiones. En general, el n�mero de divisiones efectuadas por el
algoritmo nunca supera 5 veces el n�mero de d�gitos que tienen estos n�meros. En
t�rminos de complejidad computacional, esto significa que se requieren
{\displaystyle O(\log n)} {\displaystyle O(\log n)} divisiones para calcular el
m�ximo com�n divisor de {\displaystyle n} n y {\displaystyle m} m donde
{\displaystyle n>m} {\displaystyle n>m}.

El n�mero promedio de divisiones efectuadas por el algoritmo se estuvo investigando


desde 1968, pero s�lo hasta apenas el a�o 2002, Brigitte Vall�e demostr� que si los
dos n�meros se pueden representar con {\displaystyle n} n bits, entonces el n�mero
promedio de divisiones necesarias es {\displaystyle \textstyle {{\frac {\pi ^{2}}
{6}}n}} {\displaystyle \textstyle {{\frac {\pi ^{2}}{6}}n}}.

Sin embargo, no basta con saber el n�mero de divisiones. Hay que recordar que el
algoritmo de Euclides funciona tanto para polinomios como para n�meros enteros, y
en general, cualquier dominio Eucl�deo. En cada caso, la complejidad del algoritmo
depende del n�mero de divisiones efectuadas y del costo de cada divisi�n. En el
caso de los polinomios, el n�mero de divisiones es {\displaystyle O(\log n)} O(\log
n) donde {\displaystyle n} n es el grado de los polinomios.

Implementaci�n en pseudoc�digo
En general, los algoritmos 1 y 2 no son muy apropiados para implementarse
directamente en un lenguaje de programaci�n, especialmente porque consumen mucha
memoria. Si no se necesitan los valores intermedios, y s�lo se desea calcular el
m�ximo com�n divisor de dos n�meros enteros, conviene usar estas variantes:

Algoritmo de Euclides tradicional implementado de manera recurrente


Funci�n {\displaystyle \mathrm {mcd} (a,b)} {\displaystyle \mathrm {mcd} (a,b)}:

Si {\displaystyle b=0} {\displaystyle b=0} entonces:


El resultado es {\displaystyle a} a
En otro caso:
El resultado es {\displaystyle \mathrm {mcd} (b,a\;{\bmod {\;}}b)}
{\displaystyle \mathrm {mcd} (b,a\;{\bmod {\;}}b)}
Algoritmo de Euclides tradicional implementado de manera iterativa
Funci�n {\displaystyle \mathrm {mcd} (a,b)} {\displaystyle \mathrm {mcd} (a,b)}:

Mientras {\displaystyle b\neq 0} {\displaystyle b\neq 0} haga lo siguiente:


{\displaystyle (a,b)\gets (b,a\;{\bmod {\;}}b)} {\displaystyle (a,b)\gets (b,a\;
{\bmod {\;}}b)}
El resultado es {\displaystyle a} a
Algoritmo de Euclides extendido implementado de manera recurrente
Funci�n {\displaystyle {\rm {Euclides}}(a,b)} {\displaystyle {\rm {Euclides}}
(a,b)}:

Si {\displaystyle b=0} {\displaystyle b=0} entonces:


El resultado es {\displaystyle (a,1,0)} {\displaystyle (a,1,0)}
En otro caso:
{\displaystyle (d,s,t)\gets {\rm {Euclides}}(b,a\;{\bmod {\;}}b)} {\displaystyle
(d,s,t)\gets {\rm {Euclides}}(b,a\;{\bmod {\;}}b)}
El resultado es {\displaystyle (d,t,s-(a\div b)t)} {\displaystyle (d,t,s-(a\div
b)t)}
Algoritmo de Euclides extendido implementado de manera iterativa
Funci�n {\displaystyle {\rm {Euclides}}(a,b)} {\displaystyle {\rm {Euclides}}
(a,b)}:

{\displaystyle (s,t,s^{\prime },t^{\prime })\gets (1,0,0,1)} {\displaystyle


(s,t,s^{\prime },t^{\prime })\gets (1,0,0,1)}
Mientras {\displaystyle b\neq 0} {\displaystyle b\neq 0} haga lo siguiente:
Divida {\displaystyle a} a entre {\displaystyle b} b para obtener un cociente
{\displaystyle q} q y un residuo {\displaystyle r} {\displaystyle r}
{\displaystyle (a,s,t,b,s^{\prime },t^{\prime })\gets
(b,s^{\prime },t^{\prime },r,s-s^{\prime }q,t-t^{\prime }q)} {\displaystyle
(a,s,t,b,s^{\prime },t^{\prime })\gets (b,s^{\prime },t^{\prime },r,s-s^{\prime }
q,t-t^{\prime }q)}
El resultado es {\displaystyle (a,s,t)} {\displaystyle (a,s,t)}
Algoritmo de Euclides extendido implementado de manera iterativa con matrices
Funci�n {\displaystyle {\rm {Euclides}}(a,b)} {\displaystyle {\rm {Euclides}}
(a,b)}:

{\displaystyle Q\gets {\begin{pmatrix}1&0\\0&1\end{pmatrix}}} {\displaystyle Q\gets


{\begin{pmatrix}1&0\\0&1\end{pmatrix}}}
Mientras {\displaystyle b\neq 0} {\displaystyle b\neq 0} haga lo siguiente:
Divida {\displaystyle a} a entre {\displaystyle b} b para obtener un cociente
{\displaystyle q} q y un residuo {\displaystyle r} {\displaystyle r}
{\displaystyle Q\gets {\begin{pmatrix}0&1\\1&-q\end{pmatrix}}\times Q}
{\displaystyle Q\gets {\begin{pmatrix}0&1\\1&-q\end{pmatrix}}\times Q}
{\displaystyle (a,b)\gets (b,r)} {\displaystyle (a,b)\gets (b,r)}
El resultado es {\displaystyle (a,Q_{11},Q_{12})} {\displaystyle (a,Q_{11},Q_{12})}
Acerca de la notaci�n empleada:

{\displaystyle x\gets y} {\displaystyle x\gets y} significa "asigne a la variable


{\displaystyle x} x el valor actual de {\displaystyle y} y". En lenguajes como C,
Java, C#, Python y Visual Basic esto significa simplemente x = y. En otros
lenguajes como Pascal se traduce en a := b, en Maxima es a : b, en R, S y Ocaml es
x <- y, e inclusive se utiliza la flecha x ? y como el caso de APL.
{\displaystyle (x,y,z)\gets (a,b,c)} {\displaystyle (x,y,z)\gets (a,b,c)} significa
que primero se eval�an los valores {\displaystyle a,b,c} a,b,c y luego se asigna
{\displaystyle x\gets a,y\gets b,z\gets c} {\displaystyle x\gets a,y\gets b,z\gets
c}, etc. En lenguajes como Python, Ruby o Maxima esta instrucci�n tiene una
estructura muy similar, como por ejemplo en Python: (x,y,z) = (a,b,c). En otros
lenguajes es necesario el uso de variables auxiliares, como por ejemplo en lenguaje
C: aux1 = b; aux2 = c; x = a; y = aux1; z = aux2;.
{\displaystyle a\div b} {\displaystyle a\div b} significa "el cociente de dividir
{\displaystyle a} a entre {\displaystyle b} b". A esta operaci�n se le conoce
tambi�n como la divisi�n truncada porque trunca la parte fraccionaria del n�mero.
En muchos lenguajes de programaci�n esto se implementa simplemente como a/b. Otras
maneras son a\b (Visual Basic) , a div b (Pascal) o bien a//b (Python 3).
{\displaystyle a\;{\bmod {\;}}b} {\displaystyle a\;{\bmod {\;}}b} significa "el
residuo de dividir {\displaystyle a} a entre {\displaystyle b} b". A esta operaci�n
se le conoce simplemente como m�dulo. En muchos lenguajes de programaci�n se
implementa como a % b, mientras que en otros es a mod b (Visual Basic o Pascal) o
bien a rem b (Ada).

También podría gustarte