Algoritmo de Euclides (Aritmética entera)

Anuncio
Departamento de Matemática Aplicada
http://www.dma.fi.upm.es/
Faculta de Informática – Universidad Politécnica de Madrid
Aritmética Entera
Laboratorio de Matemática Discreta
Jesús Martínez Mateo [email protected]
Práctica 2. Máximo común divisor
Algoritmo de Euclides
Dados dos enteros a ≥ b,
, tenemos que mcd(a, b) = mcd(b, r ) donde r es el resto
de la división de a entre b, a = b∙q+r. Si aplicamos esta proposición de forma sucesiva, tenemos
el algoritmo de Euclides que concluye cuando el resto es 0.
Ejemplo
Otra posible descripción del algoritmo es la siguiente:
Sean a ≥ b>0 dos enteros tales que a = b∙q1+r1, entonces tenemos que
mcd(a,b) = mcd(b,r1)
si r1=0 entonces mcd(a,b)=b
si r1≠0, b = r1∙q2+r2
mcd(b,r1) = mcd(b,r2)
si r2=0 entonces mcd(b,r1)= r1
si r1≠0, r1 = r2∙q3+r2
mcd(r1,r2) = mcd(r1,r3)
si r3=0 entonces mcd(r1,r2)= r2
y así sucesivamente hasta que obtener resto 0.
Pseudocódigo
Basada en la descripción anterior, programa una función que implemente el algoritmo de
Euclides arriba descrito.
Como ayuda se proporciona el siguiente pseudocódigo:
función mcd(a, b):
r = Resto de a entre b
Mientras el resto sea mayor que 0:
a <- b
b <- r
r <- Resto de a entre b
Devolver b
Ejercicio 1
Implementa en Python el pseudocódigo anterior y comprueba que resultado devuelvo es el
esperado.
Departamento de Matemática Aplicada
http://www.dma.fi.upm.es/
Faculta de Informática – Universidad Politécnica de Madrid
Ejercicio 2
Sabemos que el número de pasos del algoritmo de Euclides para calcular el máximo común
divisor de dos enteros, mcd(a, b), es como máximo 5 veces el número de dígitos del máximo
de ambos enteros, max(a,b).
Modifica la función implementada en el ejercicio anterior para que devuelva el número de
pasos ejecutados, y comprueba que se cumple la afirmación anterior para distintos casos que
considere significativos.
Nota:
Una función en Python puede devolver varios valores en la llamada a return de la siguiente
forma:
def div(a,b):
q = a / b
r = a % b
return q, r
>>> q, r = div(12,5)
Descargar