Euclides de Alejandr³a (aprox. 325{265 a. C.) presento un algoritmo para encontrar el MCD de dos números enfermos m y n:
1: def mcd (m, n):
2: if m % n == 0:
3: return n
4: else:
5: return mcd(n, m%n)
En la primera l³nea del cuerpo, usamos el operador de modulo para comprobar la divisibilidad. En la ultima l³nea, lo usamos para calcular el resto de la división.
Dado que todas las operaciones que hemos escrito creaban un nuevo objeto Fracción para devolver el resultado, podemos reducir todos los resultados modificando el método de inicialización.
1: class Fracción:
2: def __init__(self, numerador, denominador=1):
3: m = mcd (numerador, denominador)
4: self.numerador = numerador / m
5: self.denominador = denominador / m
Ahora siempre que creemos una Fracción quedara reducida a su forma canoníca:
>;>> Fracción(100,-36)
-25/9
Una característica estupenda de mcd es que si la fracción es negativa, el signo menos siempre se trasladara al numerador.
Deja un comentario