Está en la página 1de 13

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

 1Algoritmo original de Euclides

 2Algoritmo de Euclides tradicional

o 2.1Generalización

o 2.2Descripción formal

 3Algoritmo de Euclides extendido

o 3.1Fundamentos

o 3.2Descripción formal

 4Aplicaciones

o 4.1Simplificar fracciones

o 4.2Fracciones continuas

o 4.3Inversos módulo m

 5Complejidad del algoritmo

 6Implementación en pseudocódigo

 7Véase también

 8Referencias

 9Bibliografía

 10Enlaces externos
Algoritmo original de Euclides[editar]

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í.

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:

1. 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.
2. Si se obtiene un residuo EA, este 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.
3. 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[editar]


Al dividir  entre  (números enteros), se obtiene un cociente  y un resto . Es posible
demostrar que el máximo común divisor de  y  es el mismo que el de  y . Sea c el
máximo común divisor de  y , como  y  divide a  y a , divide también a . Si existiera otro
número mayor que  que divide a  y a , también dividiría a  , por lo que  no sería el mcd
de  y , lo que contradice la hipótesis). Este es el fundamento principal del algoritmo.
También es importante tener en cuenta que el máximo común divisor de cualquier
número  y es precisamente . Para fines prácticos, la notación  significa máximo común
divisor de  y .
Según lo antes mencionado, para calcular el máximo común divisor de 2366 y 273 se
puede proseguir de la siguiente manera:

Pas
Operación Significado
o

2366 dividido entre 273 es 8 y sobran


1
182

2 273 dividido entre 182 es 1 y sobran 91

3 182 dividido entre 91 es 2 y sobra 0

La secuencia de igualdades  implican que . Dado que , entonces se concluye que . 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  y ,
se siguen las siguientes reglas:
1. Si  entonces  y el algoritmo termina
2. En otro caso,  donde  es el resto de dividir  entre . Para calcular  se utilizan
estas mismas reglas
Asuma que llamamos  y . Aplicando estas reglas se obtiene la siguiente secuencia de
operaciones:

Paso Operación Significado


1  dividido entre  es  y sobran 

2  dividido entre  es  y sobran 

3  dividido entre  es  y sobran 

 dividido entre  es  y sobran 

 dividido entre  es  y sobra

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  (el último residuo que no es cero).
Generalización[editar]
En realidad, el algoritmo de Euclides funciona no sólo para los números naturales, sino
para cualquier elemento en el 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  y  el algoritmo
de Euclides sugiere la siguiente secuencia de operaciones:

Pas
Operación Significado
o

1  dividido entre  es  y sobra 

2  dividido entre  es  y sobra 

3  dividido entre  es  y sobra 0

De esta manera se concluye que su máximo común divisor es .


Descripción formal[editar]
Se puede expresar este algoritmo de manera más formal usando pseudocódigo. En
este caso la expresión "" significa "el residuo de dividir  entre " (véase Aritmética
modular).

Algoritmo 1 de Euclides

Entrada: Valores  y  pertenecientes a un dominio euclídeo


Salida: Un máximo común divisor de  y 
1. , 
3. Mientras  haga lo siguiente:
4. El resultado es: 

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 .

Algoritmo de Euclides extendido[editar]


El algoritmo de Euclides extendido permite, además de encontrar un máximo común
divisor de dos números enteros  y , expresarlo como la mínima combinación lineal de
esos números, es decir, encontrar números enteros  y  tales que . Esto se generaliza
también hacia cualquier dominio euclidiano.
Fundamentos[editar]
Existen varias maneras de explicar el algoritmo de Euclides extendido, una de las más
comunes consiste en la siguiente:
1. Usar el algoritmo tradicional de Euclides. En cada paso, en lugar de " dividido
entre  es  y de resto " se escribe la ecuación  (véase algoritmo de la división).
2. Se despeja el resto de cada ecuación.
3. 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  se usa la siguiente fórmula (véase Producto de matrices):
(1)
Supóngase que se utiliza el algoritmo de Euclides tradicional para calcular los
valores  y  que ahí se describen. Por cada valor  calculado se puede formar la matriz .
Usando la ecuación (1) de manera repetida se puede calcular el producto de las
primeras  matrices de este tipo:
Resulta ser que los valores  y  tienen la propiedad de que , es decir, expresan a  como
una combinación lineal de  y . Particularmente, como  entonces se tiene , 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  en ese mismo orden. La
matriz  aparece en el extremo derecho y la matriz  en el izquierdo.
Regresando al primer ejemplo, la sucesión de cocientes es ,  y . Entonces se puede
calcular
Utilizando el primer renglón de esta matriz se puede leer que , 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[editar]
Para expresar el algoritmo de Euclides extendido es conveniente notar la manera en
que se calculan los valores  y  con la multiplicación de matrices:
De esta manera  y además . Por lo tanto el algoritmo en pseudocódigo se puede
expresar como sigue:

Algoritmo 2 de Euclides extendido

Entrada: Valores  y  pertenecientes a un dominio euclídeo


Salida: Un máximo común divisor de  y , y valores  y  tales que 
3. Mientras  haga lo siguiente:
1. Divida  entre  para obtener el cociente  y el residuo 
4. El resultado es:  es un máximo común divisor de  y  y se expresa 

Aplicaciones[editar]
Simplificar fracciones[editar]
Al momento de hacer cálculos con fracciones, es de gran importancia saber cómo
simplificarlas. Por ejemplo, la fracción  es equivalente con  (véase Número racional). De
manera más general,  siempre que . Para reducir una fracción cualquiera , sólo se
necesita dividir  y  entre su máximo común divisor.
Por ejemplo, si se desea reducir , primero se usa el algoritmo de Euclides para
encontrar . Se hacen las divisiones  y . Luego entonces se concluye que .
Fracciones continuas[editar]
La sucesión de divisiones que se efectúan al seguir el algoritmo de Euclides puede ser
utilizada para expresar una fracción cualquiera  como fracción continua. Esto se debe a
que si  y , entonces
(3)
Por ejemplo, para encontrar el máximo común divisor de  y  el algoritmo genera la
siguiente secuencia de divisiones:
Pas
Operación Significado
o

93164 dividido entre 5826 es 15 y sobran


1
5774

2 5826 dividido entre 5774 es 1 y sobran 52

3 5774 dividido entre 52 es 111 y sobran 2

4 52 dividido entre 2 es 26 y sobra 0

Todas estas ecuaciones las podemos hacer parecidas a la ecuación (3 3):


Si se sustituye la segunda ecuación en la primera, se obtiene
Si se repite este proceso de substitución entonces se obtiene la expresión deseada:
De manera más general, la fracción continua encontrada con este algoritmo siempre es
de la forma

Inversos módulo m[editar]
Artículo principal: Inverso multiplicativo (aritmética modular)

Decimos que dos números enteros son congruentes módulo  (aunque también se


puede generalizar para cualquier otro dominio euclídeo) si al dividirlos
entre  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  es congruente con  módulo  se escribe , en el
ejemplo anterior se tiene . Supóngase que se conocen los valores de ,  y , pero que se
desconoce el valor  en la siguiente congruencia:
(2)
Basta encontrar un valor  que satisfaga: , pues de esta manera al multiplicar la
ecuación (2) por  se tendrá la solución deseada:
Al elemento  se le llama "inverso módulo " de . Desafortunadamente este valor no
siempre existe. Por ejemplo, con  y  no existe ningún número entero  tal que . De hecho
este valor existe si y sólo si  (la existencia de soluciones depende de la condición ,
mientras que la unicidad depende de que el ). Más aún, si al usar el algoritmo de
Euclides extendido (ahora con ) se obtiene , entonces el valor  es el inverso
módulo  de . Por ejemplo, se desea resolver la ecuación
Entonces con el algoritmo de Euclides extendido se obtiene que . Como  entonces 5
tiene un inverso módulo . Más aún, como , entonces ese inverso es 2. Entonces
Es decir que el valor de  es .

Complejidad del algoritmo[editar]

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  y  se obtiene
la siguiente secuencia de operaciones:

Pas
Operación Significado
o

89 dividido entre 55 es 1 y sobran


1
34

55 dividido entre 34 es 1 y sobran


2
21

34 dividido entre 21 es 1 y sobran


3
13

4 21 dividido entre 13 es 1 y sobran 8


5 13 dividido entre 8 es 1 y sobran 5

6 8 dividido entre 5 es 1 y sobran 3

7 5 dividido entre 3 es 1 y sobran 2

8 3 dividido entre 2 es 1 y sobran 1

9 2 dividido entre 1 es 2 y sobra 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  divisiones para
calcular el máximo común divisor de  y  donde .
El número promedio de divisiones efectuadas por el algoritmo se estuvo investigando
desde 1968, pero solo hasta apenas el año 2002, Brigitte Vallée demostró que si los
dos números se pueden representar con  bits, entonces el número promedio de
divisiones necesarias es .
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  donde  es el grado de los polinomios.

Implementación en pseudocódigo[editar]
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 :
Si  entonces:
El resultado es 
En otro caso:
El resultado es 

Algoritmo de Euclides tradicional implementado de manera iterativa

Función :
Mientras  haga lo siguiente:
El resultado es 

Algoritmo de Euclides extendido implementado de manera


recurrente

Función :
Si  entonces:
El resultado es 
En otro caso:
El resultado es 

Algoritmo de Euclides extendido implementado de manera iterativa

Función :
Mientras  haga lo siguiente:
Divida  entre  para obtener un cociente  y un residuo 
El resultado es 

Algoritmo de Euclides extendido implementado de manera iterativa con matrices

Función :
Mientras  haga lo siguiente:
Divida  entre  para obtener un cociente  y un residuo 
El resultado es 

Acerca de la notación empleada:


  significa "asigne a la variable  el valor actual de ". 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.
  significa que primero se evalúan los valores  y luego se asigna , 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; .
  significa "el cociente de dividir  entre ". 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).
  significa "el residuo de dividir  entre ". 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).

Véase también[editar]
 Implementaciones en lenguajes en la parte de discusión

Referencias[editar]
Bibliografía[editar]
 von zur Gathen, Joachim; Gerhard, Jürgen (2003). «The Euclidean
Algorithm». Modern Computer Algebra. Cambridge University Press. ISBN 0-521-
82646-2.
 Shoup, Victor (2008). «Euclid’s algorithm». A Computational Introduction to Number
Theory and Algebra. Cambridge University Press. ISBN 978-0-521-85154-1.
 Johnsonbaugh, Richard (2005). «Introducción a la teoría de números». Matemáticas
Discretas. México: PEARSON EDUCACIÓN. ISBN 970-26-0637-3.
 Ralph P. Grimaldi (1998). «Propiedades de los números enteros: Inducción
matemática». Matemáticas Discreta y Combinatoria. México: Addison Wesley
Longman de México. ISBN 968-444-324-2.
 Lipschutz, Seymour; Lipson, Marc (2009). «Propiedades de los
enteros». Matemáticas Discretas. McGraw-Hill. ISBN 978-970-10-7236-3.
 Brassard, Gilles; Bratley, Paul (1997). «Análisis de algoritmos». Fundamentos de
Algoritmia. Madrid: PRENTICE HALL. ISBN 84-89660-00-X.
 Vallée, Brigitte (2002). «Dynamical Analysis of -Euclidean Algorithms». Journal of
Algorithms 44 (1). ISSN 0196-6774 , pp. 246-285. Archivado desde el original el 2 de
octubre de 2006.
 Cormen, Thomas; Leiserson, Charles; Rivest, Ronald; Stein, Clifford (2009).
«Number-Theoretic Algorithms». Introduction to Algorithms. The MIT Press. ISBN
978-0-262-53305-8.
 Barrera Mora, Fernando (2005). «Definiciones y resultados generales». Introducción
a la Teoría de Grupos. Publicaciones Electrónicas de la Sociedad Matemática
Mexicana. p. 16-17. ISBN 968-9161-02-4. Consultado el 2 de julio de 2017.
 Cárdenas, Humberto; Lluis, Emilio; Raggi, Francisco; Tomás, Francisco (2004).
«Divisibilidad». Álgebra Superior. México: Trillas. ISBN 968-24-3783-0.
 Pérez Seguí, María Luisa (2006). «Divisibilidad». Teoría de Números. Instituto de
Matemáticas, UNAM. ISBN 970-32-1170-0.
 Sánchez Velázquez, Jesús (1998). «Algoritmos para números
grandes». Introducción al análisis de algoritmos. México: Trillas. ISBN 968-24-4341-5.
 Baldor, Aurelio (2008). «Máximo común divisor». Álgebra. México: Grupo Editorial
Patria. ISBN 978-970-817-000-0.

Enlaces externos[editar]
  Wikilibros alberga un libro o manual sobre implementaciones del algoritmo de
Euclides.
 Divisibilidad. El algoritmo de Euclides.
 Algoritmo de Euclides.
 Weisstein, Eric W. «Euclidean Algorithm». En Weisstein, Eric W, ed. MathWorld (en
inglés). Wolfram Research.
 Explicación dinámica del máximo común divisor en este vídeo de YouTube[1].
 En gaussianos[2] se pueden ver explicaciones y ejemplos un poco más avanzados
de este algoritmo.

 Proyectos Wikimedia

  Datos: Q230848

  Multimedia: Euclidean algorithm

 Identificadores

 GND: 4659898-4

 Microsoft Academic: 98371066

 Diccionarios y enciclopedias

 Britannica: url
Categorías: 
 Teoría de números elemental
 Algoritmos epónimos en matemáticas
 Euclides

También podría gustarte