Fracción continua mcd X78066


Statement
 

pdf   zip

html

Este problema sólo se visualiza correctamente en su versión pdf.

Todo número racional n/m se puede representar como el resultado de una fracción contínua finita.

Por ejemplo:

972
421
 =  2 + 
1
3 + 
1
4 + 
1
5 + 
1
6

Esta representación se suele codificar con la lista de los valores enteros que se suman más el último denominador: [2, 3, 4, 5, 6]

Los números de esta lista coinciden con los cocientes del cálculo del algoritmo de Euclides para el máximo común divisor:

mcd(ab) = mcd(ba % b)      (1)

mcd(a, 0) = a     (2)

Las reducidas (P y Q) son las sumas parciales de los quebrados de enteros de la fracción continua. Cualquier pareja P, Q sirve como aproximación válida P/Q al racional. Se pueden calcular en paralelo al mcd:

    ------------------------------
    a |     | 972 421 130  31   6}
    b |     | 421 130  31   6   1}
    r |     | 130  31   6   1   0}-- cálculo del MCD
    q |     |   2   3   4   5   6}
    ------------------------------
    P | 0 1 |   2   7  30 157 972}-- cálculo de las reducidas
    Q | 1 0 |   1   3  13  68 421}
 

P y Q se han calculado operando de la siguiente manera:

    P -> 1*2+0 2  2*3+1 7  7*4+2 30  30*5+7 157  157*6+30 972
         -----=-, -----=-, -----=--, ------=---, --------=---
    Q -> 0*2+1 1  1*3+0 3  3*4+1 13  13*5+3  68   68*6+13 421
 

Se pide que diseñes la función fraccion_continua_mcd que, dados dos valores enteros n (numerador) y m (denominador), ambos enteros positivos, calcule los cocientes y restos del MCD siguiendo el algoritmo de Euclides y en paralelo calcule las P y Q de las reducidas.

El programa tiene que devolver tres listas: los cocientes del MCD, las P y las Q.

Sample session
>>> fraccion_continua_mcd(972, 421)
([2, 3, 4, 5, 6], [2, 7, 30, 157, 972], [1, 3, 13, 68, 421])
>>> fraccion_continua_mcd(98,35)
([2, 1, 28], [2, 3, 98], [1, 1, 35])
>>> fraccion_continua_mcd(98,34)
([2, 1, 7, 4], [2, 3, 23, 98], [1, 1, 8, 34])
Information
Author
InfBesos
Language
Spanish
Official solutions
Python
User solutions
Python