Sie sind auf Seite 1von 4

Algoritmos para el Mximo Comn Divisor a u

Jhoel Darwin Quispe Condori 27 de abril de 2012

1.
1.1.

Explicacin terica de cada Algoritmo o o


Algoritmo Extendido de Euclides 1

Referencia: http://ww3.algorithmdesign.net/sample/ch10-crypto.pdf . pag14 (Extended Euclids Algorithm) Es una versin del algoritmo clsico de Euclides, en el cual el resultado se o a muestra en funcin de la ecuacin: MCD(a, b) = a(x) + b(y) tales que x, y sean o o nmeros enteros. Se siguen los siguientes pasos: u 1. Se realiza el algoritmo de Euclides. 2. Se almacena los cocientes de las operaciones para hallar el MCD. 3. Se aplica la propiedad: d = kb + lq Remplazando q; hasta llegar a: d = kb + l(a - rb) = la + (k - lr)b 4. Esto se ejecuta hasta expresar el MCD en funcin de los dos nmeros inio u ciales.

1.1.1.

Implementacin Algoritmo Extendido de Euclides o

1. Con la nalidad de mostrar y organizar los datos de la funcin se impleo mentar la funcin insertar, que retornar un array de shenlongs con 3 a o a espacios separados: para el MCD, para el valor x y para y. 2. Se les asigna a a y b los valores de dividendo y divisor, un array de shenlong de tamao 3 y 9 variables de tipo shenlong para ir almacenando los n datos a = 1317; b = 56; x; y .

3. Se crea shenlong res para el resultado, es decir el residuo, y shenlong temp, Tambien un stack de shenlong para almacenar en este los cocientes. 4. Luego pregunta si a modulo b es igual a 0, para los casos en los que se ingrese dos numeros, el primero multiplo del segundo, en este caso y se vuelve 1, x no cambia, y el MCM es 0. 5. Si no cumple con esa condicin se realiza lo siguiente: o 6. Se realiza un bucle hasta que el modulo de a y b sea distinto de 0, en este bucle:(este paso desarrolla de forma comun MCM de la forma euclides clasico, y a la vez almacena los valores de -a/b en un stack). Asigna a s.pushel valor actual de -a/b. Asigna a la variable temp el valor actual de b. Asigna a la variable b el valor actual de a modulo b. Asigna a la variable a el valor actual de temp. 7. Se le asigna el valor de b a res(con este paso ya se tiene listo el residuo). res = 1 . 8. Se le asigna el valor de s.top a y. y = -13 . 9. Se elimina el ultimo valor de s con s.top. 10. Se le asigna el valor 1 a x. y = 2 . 11. Se crea un bucle hasta que el stack 1 este vacio(en este se hallan los valores de x y y): Asigna a tempel valor actual de x. Asigna a la variable x el valor actual de y. Asigna a la variable y el valor actual de temp + y*s.top(). Se elimina el ultimo valor del stack s con s.top. 12. Al nal de este ultimo bucle, los valores de x y y son -27 y 635 respectivamente.

1.1.2. res 0 0 0 0 0 1 x 1 -13 14 -27

Tablas del Algoritmo Extendido de Euclides a 1317 56 29 27 2 1 y -13 14 -27 635 b 56 29 27 2 1 0 temp 1 -13 14 temp 0 56 29 27 2 2 s.top -1 -1 -23 s -23 -1 , -23 -1 , -1 , -23 -13 , -1 , -1 , -23 -13 , -1 , -1 , -23 s -1 , -1 , -23 -1 , -23 -23 -

2.

Algoritmo Extendido de Euclides 2

Este algoritmo resulta mucho mas ecaz que el anterior ya que resuelve todo el problema sin tener que crear ningun stack. Ahora sera explicado 1. Con la nalidad de mostrar y organizar los datos de la funcim se impleo mentar la funcin insertar, que retornar un array de shenlongs con 3 a o a espacios separados: para el MCD, para el valor x y para y. 2. Se les asigna a a y b los valores de dividendo y divisor, un array de shenlong de tamao 3 y 9 variables de tipo shenlong para ir almacenando los n datos a = 100; b = 60: shenlong p[3]; shenlong x, y, x1, y1, x2, y2, d, q, r . 3. Luego pregunta si b es igual a 0: (En este caso no pasa, por lo que no entra a este if )

Asigna al valor de d que representa el MCD, el valor de a. A la variable x se le asigna 1 y a y se le asigna 0. Inserta los valores de d, x, y en el array p.

4. Si no cumple con esa condicin: asigna a los valores de x2, y1 el valor o entero de 1; y a los valores de x1; y2 los valores de 0. Adems inicializa a un bucle que sucede mientras (while) b sea distinto de 0:

Asigna a la variable q el cociente de a y b. 1 : q = 1 ; 2 q = 1 ; 3 : q = 2 . Asigna a la variable r la diferencia de a y el producto de q y b, en pocas palabras el residuo. 1 : r = 40 ; 2 : r = 20 ; 3 : r = 0 . Asigna a x y a y, la diferencia de x2 y el producto de q y x1 ; y la diferencia de y2 y el producto de q y y2. De esta forma se van almacenando los distinstos residuos, adems, los valores de x y de y a van cambiando. 1 : x = 1; y = -1 ; 2 : x = -1; y = 2 ; 3 : x = 3; y = -3 . A la variable a se le asigna b y a b se le asigna r. 1 :a = 60; b = 40 ; 2 : a = 40; b = 20 ; 3 : a = 20; b = 0 A x2 se le asigna x1 ; a x1 se le asigna x ; a y2 se le asigna y1 ; y a y1 se le asigna y. 1 : x2 = 0; x1 = 1; y2 = 1; y1 = -1 ; 2 : x2 = 1; x1 = -1; y2 = 1; y1 = 2 3 : x2 = -1; x1 = 3; y2 = 2; y1 = -3 .

5. Se le asigna el valor de a a d. d = 20 . 6. Se le asigna el valor de x2 a x. x = -1 . 7. Se le asigna el valor de y2 a y. y = 2 . 8. Se almacenar d, x y y en el array p y se imprimirn los valores: d = 20; a a x = -1; y = 2 .

Das könnte Ihnen auch gefallen