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)