El Algoritmo de Euclides Sirve Para Obtener El

Embed Size (px)

Citation preview

  • 8/18/2019 El Algoritmo de Euclides Sirve Para Obtener El

    1/5

    El algoritmo de Euclides sirve para obtener el máximo común

    divisor (abreviado normalmente como M.C.D.) de dos números enteros

    positivos. El mínimo común múltiplo (M.C.M.), puede obtenerse

    también con éste algoritmo, haciendo una sencilla operación con el M.C.D.

    obtenido. En este artículo hablamos de cómo programarlo.

    uedes encontrar una demostración en línea al !inal de ésta p"gina.

    #e llama así por Euclides de $le%andría, un matem"tico griego &ue vivió en

    los tiempos del !araón tolomeo ', del &ue nos han &uedado algunos tetos

    recopilatorios del saber matem"tico geométrico de su época. *o es &ue

    Euclides escribiera tal cual éste algoritmo, sino &ue, aparentemente, de%ó

    escritas algunas relaciones entre números &ue son la base de lo &ue ho

    llamamos MCD.

    Es uno de los algoritmos típicos &ue los pro!esores de programación ponen a

    sus alumnos para practicar el bucle repetir+mientras o hacer+hasta (repeat+

    until o do+hile) pasando valores de una iteración a otra del bucle.

    Máximo Común Divisor (MCD)

    El m"imo común divisor de dos números enteros positivos a  b es otro

    número entero positivo c tal &ue si dividimos a/c  b/c, los restos de las

    divisiones son -, adem"s no eiste otro número maor &ue c &ue tenga esta

    caracterísitica. Como nos decían en el cole, el máximo común dívisor

    (mcd) de dos enteros a y b es el mayor entero c que divide exactamente

    a a y b .

     $un&ue en el colegio nos ense/an a encontrar el mcd a partir de lade a  b,

    esa no es una buena !orma de obtener el mcd computacionalmente, a &ue el

    algoritmo para descomponer en !actores primos es mu costoso, en términosde computación. El algoritmo de Euclides es bastante m"s e!iciente para

    obtener el mcd, aun&ue normalmente sorprende un poco cuando tenemos

    contacto con él por primera ve0.

    El algoritmo de Euclides es el siguiente:

    http://latecladeescape.com/h/2015/09/algoritmo-de-euclides#demohttp://latecladeescape.com/h/2015/09/algoritmo-de-euclides#demohttp://es.wikipedia.org/wiki/Euclideshttp://es.wikipedia.org/wiki/Euclideshttp://latecladeescape.com/h/2015/09/algoritmo-de-euclides#demo

  • 8/18/2019 El Algoritmo de Euclides Sirve Para Obtener El

    2/5

    #iendo a  b dos enteros positivos tales &ue a>b, comen0amos

    dividiendo a/b, con lo &ue obtendremos un resto r1  un cociente q 1.

    1acemos la operación q 1=a/b, utili0ando la división entera, sin decimales....

    pero realmente no sólo nos interesa el resultado o cociente de la división,

    sino &ue nos interesa también el resto, así &ue la operación la vamos a

    reescribir de otra !orma.

    Es importante &ue llamemos a al maor de los dos números (siempre el

    maor va a ser a). Debemos dividir a entre b  obtener un cociente (al &ue

    llamaremos q 1) un resto (al &ue llamaremos r1).

    2btenidos ese cociente ese resto, se cumple &ue3

    a=q 1·b+r1

    4os lengua%es de programación suelen tener un operador para e!ectuar la

    división entera (con lo &ue obtendremos &5. or e%emplo, en C63 q1=a/b;),

    otro para obtener el resto o módulo de la división (con lo &ue obtendremos

    r5. or e%emplo, en C63 r1=a%b;5).

     $ partir de esa primera división, es necesario repetir un proceso3

    • dividir el numero &ue !ue divisor en el paso anterior entre el restoobtenido en el paso anterior

    • despreciar el cociente

    • si el resto obtenido esta ve0 es -, el mcd es el divisor de esta operacion,

    es decir, el último resto no nulo (recordemos &ue el divisor de esta operación

    !ué el resto en la anterior.

    • #i el resto no es -, ir al primer paso

    Es un poco engorroso la primera ve0, pero realmente es un algoritmo mu

    sencillo.

    #iguiendo con el e%emplo, en la segunda iteración, dividiríamos

     b7r5 obteniendo un resto r8(hacemos la operación de división para obtener el

    http://latecladeescape.com/h/2015/09/algoritmo-de-euclides#fn:1http://latecladeescape.com/h/2015/09/algoritmo-de-euclides#fn:1

  • 8/18/2019 El Algoritmo de Euclides Sirve Para Obtener El

    3/5

    cociente, al &ue llamamos &8  la de obtener el resto, al &ue llamamos r8), de

    tal manera &ue se cumpliría lo siguiente3

     b=q 2·r1+r2

    En la tercera iteración, dividimos r57r8 obteniendo un resto r9

    r1=q 3·r2+r3

     : se continúa así hasta obtener un resto -. El último resto (llamémosle r; )

    distinto de cero es el mcd.

    rk2=q k ·rk1+rk  rk1=q k+1·rk +!

    rk  es el mcd(a,b)

    Es decir, empe0amos dividiendo un número entre otro (obteniendo el resto

    también, no sólo el cociente), a partir de ahí, seguimos dividiendo elnúmero m"s pe&ue/o entre el resto &ue nos ha salido... continuamos

    dividiendo por el resto anterior una ve0 otra hasta &ue en ese proceso

    repetitivo obtengamos un resto &ue sea -.

  • 8/18/2019 El Algoritmo de Euclides Sirve Para Obtener El

    4/5

      int iaux; //auxiliar  a = Math.Abs(a); //tomamos alor absoluto  b = Math.Abs(b);  int i!=Math.Max(a,b); //i! = el m"s rande  int i$=Math.Min(a,b); //i$ = el m"s %e&ue'o  do

      {  iaux = i$; //uardar diisor  i$ = i! i$; //resto %asa a diisor  i! = iaux; //diisor %asa a diidendo  *hile (i$ += );  return i!; //ultimo resto no nulo

     $l principio cuesta un poco de coger... te recomiendo hacer una tra0a

    mentalmente (o me%or, aud"ndote de papel).

    ?e dar"s cuenta de cómo se van despla0ando los valores a medida &ue

     vamos dividiendo hasta obtener el resto -... aun&ue, realmente... no estamos

    utili0ando los cocientes, sino sólo los restos @+)

     $un&ue en la introducción hemos mencionado la división (7), realmente no

    es del todo cierto... sólo &ueremos los restos, no el cociente...(operador

    módulo o resto3 A en C6). 1emos introducido esta pe&ue/a trampa en la

    eplicación (pero no en el código) por&ue cuando dividimos a mano,

    realmente en la misma operación de división obtenemos dos resultados a la

     ve03 por un lado el cociente por otro, el resto. #in embargo, los lengua%es de

    programación hacen cada una de esas cosas por separado3 pueden obtener

    un cociente sin necesidad de obtener un resto al revés, obtener un resto sin

    necesidad de dividir... así &ue en nuestro algoritmo no dividimos realmente3

    sólo obtenemos el resto. #i lo hiciéramos a mano, tendríamos &ue dividir,

    con lo &ue obtendríamos el cociente el resto simult"neamente, pero

    despreciaríamos el cociente nos &uedaríamos sólo con el resto.M"nimo Común Múlti#lo! (MCM)

    Mu relacionado con el m"imo común divisor est" el mínimo común

    múltiplo (mcm).

  • 8/18/2019 El Algoritmo de Euclides Sirve Para Obtener El

    5/5

    El mcm de dos enteros positivos a b es un valor c entero positivo tal &ue

    al dividir c7a c7b el resto es -, adem"s no eiste otro número menor &ue c

    &ue cumpla esta condición.

    1a una relación mu sencilla entre mcm mcd. Es ésta3

    mcm"a#b$="a·b$/mcd"a#b$

     $sí pues, también podemos obtener el mcm mediante el algoritmo de

    Euclides.

    static int EuclidesMCM(int a, int b){  return (a / EuclidesMCD(a, b)) - b;

    2bserva &ue primero se divide a entre el mcd, en lugar de multiplicar ab.

     Esto se hace para evitar un posible desbordamiento al multiplicar a b.

    Demo