Sie sind auf Seite 1von 3

Algoritmo de Euclides

El algoritmo de Euclides es un mtodo antiguo y eficaz para calcular el mximo comn divisor
(MCD). Fue originalmente descrito por Euclides en su obra Elementos. El algoritmo de Euclides
extendido es una ligera modificacin que permite adems expresar al mximo comn divisor
como una combinacin lineal. Este algoritmo tiene aplicaciones en diversas reas como
lgebra, teora de nmeros y ciencias de la computacin, entre otras. Con unas ligeras
modificaciones suele ser utilizado en computadoras electrnicas debido a su gran eficiencia.

Algoritmo original de Euclides


En la concepcin griega de la matemtica, los nmeros se entendan como magnitudes
geomtricas. Un tema recurrente en la geometra griega es el de la conmensurabilidad de
dos segmentos: dos segmentos (nmeros) AB y CD son conmensurables cuando existe un
tercer segmento PQ el cual cabe exactamente un nmero 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 pitagricos
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 comn
posible.
Euclides describe en la proposicin VI I.2 de sus Elementos un mtodo que permite hallar
la mayor medida comn posible de dos nmeros (segmentos) que no sean primos entre s,
aunque de acuerdo a la poca tal mtodo se explica en trminos geomtricos, lo que se
ilustra en la siguiente transcripcin.
Para encontrar la mxima medida comn de dos nmeros que no sean primos entre s.

Sean AB y CD los dos nmeros que no son primos uno al otro. Se necesita entonces encontrar la
mxima medida comn de ABy CD.
Si CD mide AB entonces es una medida comn puesto que CD se mide a s mismo. Y es manifiesto
que tambin es la mayor medida pues nada mayor a CD puede medir a CD. Pero si CD no mide
a AB entonces algn nmero quedar de AB y CD, el menor siendo continuamente restado del
mayor y que medir al nmero que le precede. Porque una unidad no quedar pues si no es
as, AB y CD sern primos uno del otro [Prop. VII.1], lo cual es lo contrario de lo que se supuso.
Por tanto, algn nmero queda que medir el nmero 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, FCser
entonces medida de DF. Y tambin se mide a s mismo. Por tanto tambin medir todo CD.
Y CD mide a BE. Entonces CFmide a BE y tambin mide a EA. As mide a todo BA y tambin mide
a CD. Esto es, CF mide tanto a AB y CD por lo que es una medida comn de AB y CD.
Afirmo que tambin es la mayor medida comn posible porque si no lo fuera, entonces un nmero
mayor que CF mide a los nmeros AB y CD, sea ste G. Dado que G mide a CD y CD mide
a BE, G tambin mide a BE. Adems, mide a todo BA por lo que mide tambin al residuo AE.
Y AE mide a DF por lo que G tambin mide a DF. Mide tambin a todo DC por lo que mide tambin
al residuo CF, es decir el mayor mide al menor, lo cual es imposible.
Por tanto, ningn nmero mayor a CF puede medir a los nmeros AB y CD. Entonces CF es la
mayor medida comn de AB y CD, lo cual se quera 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 mxima medida comn.
2. 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 comn. En caso contrario obtenemos un nuevo
residuo FC menor a EA.
3. El proceso se repite hasta que en algn momento no se obtiene residuo. Entonces
el ltimo residuo obtenido es la mayor medida comn.
El hecho de que los segmentos son conmesurables es clave para asegurar que el proceso
termina tarde o temprano

Algoritmo de Euclides C++

#include
using namespace std;
int mcd(int x , int y){
int t;
x = (x < 0) ? -x:x;
y = (y < 0) ? -y:y;
t = (x < y) ? x : y;
while ( (x % t) || (y % t))
--t;
return t;
}
int euc(int x,int y){
return (!y) ? x : euc(y,x%y);
}
int main()
{
int x,y;
cout << "x: ";
cin >> x;
cout << "y: ";
cin >> y;
cout << "MCD: " << mcd(x,y) << endl;
cout << "MCD (euclides): " << euc(x,y) << endl;
}

Compilar con: g++ mcd.cpp -o mcd.out

Das könnte Ihnen auch gefallen