PDF de programación - El Algoritmo de Euclides

Imágen de pdf El Algoritmo de Euclides

El Algoritmo de Euclidesgráfica de visualizaciones

Publicado el 7 de Septiembre del 2019
1.147 visualizaciones desde el 7 de Septiembre del 2019
186,3 KB
23 paginas
Creado hace 9a (28/04/2014)
El Algoritmo de Euclides

Pablo L. De Nápoli

Departamento de Matemática

Facultad de Ciencias Exactas y Naturales

Universidad de Buenos Aires

25 de abril de 2014

Pablo L. De Nápoli (Departamento de Matemática Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires )

El Algoritmo de Euclides

25 de abril de 2014

1 / 23

Parte I

El algoritmo de Euclides

Pablo L. De Nápoli (Departamento de Matemática Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires )

El Algoritmo de Euclides

25 de abril de 2014

2 / 23

El algoritmo de Euclides

El algoritmo de Euclides es un algoritmo para el cálculo del máximo común
divisor. Sean a, b ∈ N0. Para calcular mcd(a, b) podemos suponer a ≥ b
(sino intercambiamos los roles pues mcd(a, b) = mcd(b, a)

Efectuamos entonces la división entera de a por b obteniendo un primer
cociente q1 y un primer resto r1

a = q1b + r1

0 ≤ r1 < b

Si r1 = 0 el algorimo termina. Sino, dividimos a b por r1 obteniendo un
segundo cociente q2 y un segundo resto r2

b = q1r1 + r2

0 ≤ r2 < r1

Si r2 = 0 el algorimo termina. Sino, dividimos a r1 por r2 obteniendo un
tercer cociente q3 y un tercer resto r3

r1 = q2r2 + r3

0 ≤ r3 < r2

Pablo L. De Nápoli (Departamento de Matemática Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires )

El Algoritmo de Euclides

25 de abril de 2014

3 / 23

El algoritmo de Euclides (continuación)

Repitiendo (inductivamente) el procedimiento, supongamos que ya
calculamos rk . Si rk = 0 el algoritmo termina. Si no dividimos a rk−1 por
rk , obteniendo que

rk−1 = qk rk + rk+1

0 ≤ rk+1 < rk

Notamos que por construcción la sucesión de restos

r1 > r2 > r3 > . . .

es una sucesión de enteros no negativos estrictamente decreciente. Se
deduce que esta sucesión no puede continuar indefinidamente. En
consecuencia, siempre existe un N ∈ N tal que

es decir que el algoritmo de Euclides siempre termina.

rN = 0

Pablo L. De Nápoli (Departamento de Matemática Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires )

El Algoritmo de Euclides

25 de abril de 2014

4 / 23

El algoritmo de Euclides (continuación)

Teorema
El algoritmo de Euclides siempre termina y el último resto no nulo rN−1
que se obtiene es el máximo común divisor entre a y b.

Ejemplo: Calculemos el máximo común divisor entre 32 y 17 por el
algoritmo de Euclides:

32 = 1 * 17 + 15
17 = 1 * 15 + 2
15 = 7 * 2 + 1
2 = 2 * 1 + 0

El algoritmo de Euclides termina: El mcd entre 32 y 17 es 1.

Pablo L. De Nápoli (Departamento de Matemática Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires )

El Algoritmo de Euclides

25 de abril de 2014

5 / 23

El invariante del Algoritmo de Euclides

Para demostrar el teorema, usamos el siguiente lema que expresa un
invariante del algoritmo (una propiedad que se mantiene a lo largo de las
iteraciones del algoritmo.

Lema
Si efectuamos la división entera de a por b, obteniendo un cociente q y un
resto r , entonces

mcd(a, b) = mcd(b, r )

La prueba del lema es inmediata: si d es un divisor común entre a y b,
entonces d también divide a r = a − qb, en consecuencia d es un divisor
común entre b y r .

Recíprocamente si d divide a b y r , también dividirá a a pues a = bq + r .
Se deduce que b y r tienen los mismos divisores comunes que los que
tenían a y b, y en consecuencia tienen el mismo máximo común divisor.

Pablo L. De Nápoli (Departamento de Matemática Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires )

El Algoritmo de Euclides

25 de abril de 2014

6 / 23

Prueba de la correctitud del Algoritmo de Euclides

Usando el lema vemos que la sucesión de restos construida por el
algoritmo de Euclides, cumple que

mcd(a, b) = mcd(b, r1) = mcd(r1, r2) = mcd(r2, r3) = . . .

. . . = mcd(rN−2, rN−1) = mcd(rN−1, 0) = rN−1

(pues para cualquier entero c ∈ N0, mcd(c, 0) = c )
Es decir que hemos demostrado que el algoritmo de Euclides calcula
correctamente el máximo común divisor.

Pablo L. De Nápoli (Departamento de Matemática Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires )

El Algoritmo de Euclides

25 de abril de 2014

7 / 23

Programita recursivo (en Python 3) para el Algorimo de
Euclides

def mcd (a , b ):

if b > a :

return mcd (b , a )

if b ==0:

print ( " El a l g o r i t m o de E u c l i d e s termina : " )
print ( " El mcd es " ,a )
return a

else :

q , r = divmod (a , b )
print (a , " = " ,q , " * " ,b , " + " ,r )
return mcd (b , r )

Pablo L. De Nápoli (Departamento de Matemática Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires )

El Algoritmo de Euclides

25 de abril de 2014

8 / 23

Parte II

Una consecuencia del algoritmo de Euclides: El

máximo común divisor se escribe como

combinación lineal

Pablo L. De Nápoli (Departamento de Matemática Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires )

El Algoritmo de Euclides

25 de abril de 2014

9 / 23

El MCD como combinación lineal

Una consecuencia muy importante del algoritmo de Euclides es el siguiente
teorema:

Teorema
El máximo común divisor entre a y b se puede escribir como una
combinación lineal de ellos: es decir, existen enteros α = α(a, b) y
β = β(a, b) tales que

αa + βb = mcd(a, b)

El algoritmo de Euclides nos permite dar una prueba constructiva de este
teorema, construyendo las funciones α(a, b) y β(b, a) de manera recursiva.
De nuevo, podemos suponer a ≥ b.

Pablo L. De Nápoli (Departamento de Matemática Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires )

El Algoritmo de Euclides

25 de abril de 2014

10 / 23

Definiendo α(a, b) y β(a, b) recursivamente

Para encontrar la recurrencia, efectuamos la división entera de a por b,
obteniendo un cociente q = q(a, b) y un resto r = r (a, b), como antes.
Entonces por el invariante del algoritmo de Euclides sabemos que

mcd(a, b) = mcd(b, r )

Ahora supongamos que sabemos encontrar α(b, r ) y β(b, r ) tales que

Sustituyendo r = a − bq, encontramos que

α(b, r ) b + β(b, r ) r = mcd(b, r )

α(b, r ) b + β(b, r ) [a − bq] = mcd(b, r )

y efectuando la distributiva:

β(b, r ) a + (α(b, r ) − β(b, r )q)b = mcd(b, r )

Esto sugiere definir las funciones α y β recursivamente por:
β(a, b) = α(b, r ) − β(b, r )q

α(a, b) = β(b, r ),

Pablo L. De Nápoli (Departamento de Matemática Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires )

El Algoritmo de Euclides

25 de abril de 2014

11 / 23

Definiendo α(a, b) y β(a, b)(continuación)

Para que esta recurrencia funcione, debemos definir α y β cuando el
algoritmo de Euclides termina, es decir α(a, 0) y β(a, 0).

Queremos

α(a, 0) a + β(a, 0) 0 = mcd(a, 0) = a

Una manera de lograrlo es definiendo

α(a, 0) = 1

β(a, 0) = 0

(Esta elección es arbitraria, pero necesaria si querememos que β sea una
función bien definida)
Por inducción global en a ∈ N0, se prueba facilmente que α, β : D → Z
quedan bien definidas en el dominio

D = {(a, b) ∈ N0 × N0 : a ≥ b}

y que cumplen que:

α(a, b) a + β(a, b) b = mcd(a, b)

Pablo L. De Nápoli (Departamento de Matemática Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires )

El Algoritmo de Euclides

25 de abril de 2014

12 / 23

Ejemplo

Escribamos al mcd(32, 17) como combinación lineal entre ellos:

alfa( 1 , 0 )= 1, beta( 1 , 0 )= 0, mcd( 1 , 0 )= 1
1 = 1 * 1 + 0 * 0
alfa( 2 , 1 )= 0, beta( 2 , 1 )= 1, mcd( 2 , 1 )= 1
1 = 0 * 2 + 1 * 1
alfa( 15 , 2 )= 1, beta( 15 , 2 )= -7, mcd( 15 , 2 )= 1
1 = 1 * 15 + -7 * 2
alfa( 17 , 15 )= -7, beta( 17 , 15 )= 8, mcd( 17 , 15 )= 1
1 = -7 * 17 + 8 * 15
alfa( 32 , 17 )= 8, beta( 32 , 17 )= -15, mcd( 32 , 17 )= 1
1 = 8 * 32 + -15 * 17

Pablo L. De Nápoli (Departamento de Matemática Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires )

El Algoritmo de Euclides

25 de abril de 2014

13 / 23

Otro Ejemplo

Escribamos al mcd(360, 28) = 4 como combinación lineal entre ellos:

alfa( 4 , 0 )= 1, beta( 4 , 0 )= 0, mcd( 4 , 0 )= 4
4 = 1 * 4 + 0 * 0
alfa( 24 , 4 )= 0, beta( 24 , 4 )= 1, mcd( 24 , 4 )= 4
4 = 0 * 24 + 1 * 4
alfa( 28 , 24 )= 1, beta( 28 , 24 )= -1, mcd( 28 , 24 )= 4
4 = 1 * 28 + -1 * 24
alfa( 360 , 28 )= -1, beta( 360 , 28 )= 13, mcd( 360 , 28 )= 4
4 = -1 * 360 + 13 * 28

Pablo L. De Nápoli (Departamento de Matemática Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires )

El Algoritmo de Euclides

25 de abril de 2014

14 / 23

¿y el programita ?

Para implementar esto en un programa de computadora (en Python 3)
será conveniente en realidad implementar una funcion ecl que calcula la
terna

(α(a, b), β(a, b), mcd(a, b))

recursivamente (¡todo al mismo tiempo!), dado que las definiciones de α y
β no son independientes sino que están cruzadas.

Pablo L. De Nápoli (Departamento de Matemática Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires )

El Algoritmo de Euclides

25 de abril de 2014

15 / 23

Programa para el MCD como combinacion lineal

def ecl (a , b ):

if b > a :

return ecl (b , a )

if b ==0:

a l f a _ a _ b =1
b e t a _ a _ b =0
mcd_a_b = a

else :

q , r = divmod (a , b )
alfa_b_r , beta_b_r , mcd_b_r = ecl (b , r )
a l f a _ a _ b =
b e t a _ a _ b = a l f a _ b _ r - b e t a _ b _ r * q
mcd_a_b = mcd_b_r

b e t a _ b _ r

c h e q u e a _ i n v a r i a n t e (a ,b , alfa_a_b , beta_a_b , mcd_a_b )
return ( alfa_a_b , beta_a_b , mcd_a_b )

Pablo L. De Nápoli (Departamento de Matemática Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires )

El Algoritmo de Euclides

25 de abril de 2014

16 / 23

Función que chequea el invariante del algoritmo

La condición

α(a, b) a + β(a, b) b = mcd(a, b)

es ahora el invariante del algoritmo. La siguiente función (en el sentido
informático del término), permite chequearla en cada paso. Es decir nos
ayuda a comprobar la correctitud de nuestro algoritmo:

def c h e q u e a _ i n v a r i a n t e (a ,b , alfa_a_b , beta_a_b , mcd_a_b ):

print ( "
  • Links de descarga
http://lwp-l.com/pdf16541

Comentarios de: El Algoritmo de Euclides (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad