Aplicación del Teorema Chino del Resto: operar con números
Transcripción
Aplicación del Teorema Chino del Resto: operar con números
Aplicación del Teorema Chino del Resto: operar con números grandes La mayorı́a de los procesadores no son tan distintos de nosotros a la hora de trabajar con enteros: trabajan mucho más rápido con números pequeños que con números grandes. El Teorema Chino del Resto permite realizar cálculos con números “grandes” a través de cálculos con números más “pequeños”. Para ilustrar mejor la aplicación, proponemos la siguiente simplificación del problema: Supongamos como ejemplo que tenemos que trabajar con un hardware que sólo puede realizar aritmética entera sin signo de 4 bits. Tendrı́amos un rango de enteros de {0, ..., 15}. No podrı́amos hacer operaciones como 16 × 11 usando aritmética entera, pues el resultado desbordarı́a nuestras capacidades de cálculo y representación. Consideramos los siguientes números primos entre sı́: m1 = 13, m2 = 14 y m3 = 15 con lo que m = m1 · m2 · m3 = 13 · 14 · 15 = 2730. Consideramos el número 16, que desborda nuestra capacidad de representación (en binario, 16 se representa como 10000; luego son necesarios 5 bits). Podemos hacer uso aquı́ de la biyección proporcionada como consecuecia del Teorema Chino del Resto: f : Z2730 −→ Z13 × Z14 × Z15 Para ello, consideramos 16 “como una clase de congruencia módulo 2730”, es decir, 16, y vemos cuál es su imagen por la aplicación f : f (16) = (16, 16, 16) = (3, 2, 1). En la segunda igualdad hemos buscado representantes “adecuados” para las clases en Zmi , es decir, representantes ri tales que 0 ≤ ri ≤ mi − 1. Ası́ pues, podemos “representar” el número 16 como el vector (3, 2, 1). Análogamente, el número 11 puede “representarse” como el vector (11, 11, 11). 1 Para multiplicar 16 × 11 multiplicamos los dos vectores “en paralelo” componente a componente: (3, 2, 1) × (11, 11, 11) = (33, 22, 11) = (7, 8, 11) Como consecuencia del Teorema Chino del Resto, este vector (7, 8, 11) (o, más exactamente, el elemento de Z13 × Z14 × Z15 dado por (7, 8, 11)) deberı́a de corresponder al elemento de Z2730 dado por el producto 16 × 11 = 176. Dicho de otro modo: f −1 (7, 8, 11) = 176. Comprobemos que esto es ası́. Calculemos primero los valores Mk e yk necesarios para calcular f −1 (7, 8, 11): M1 = m2 · m3 = 14 · 15 = 210. M2 = m1 · m3 = 13 · 15 = 195. M3 = m1 · m2 = 13 · 14 = 182. y1 = M1−1 (mod 13) = 210−1 (mod 13) = 2−1 (mod 13) = 7 (mod 13) y2 = M2−1 (mod 14) = 195−1 (mod 14) = 13−1 (mod 14) = 13 (mod 14) y3 = M3−1 (mod 15) = 182−1 (mod 15) = 2−1 (mod 15) = 8 (mod 15) Por tanto: f −1 (7, 8, 11) = 7M1 y1 + 8M2 y2 + 11M3 y3 = 7 · 210 · 7 + 8 · 195 · 13 + 11 · 182 · 8 = 46586 = 176. Se procederı́a análogamente para sumar 16 + 11: 16 + 11 = (3, 2, 1) + (11, 11, 11) = (1, 13, 12), que representa al número entero 27 (puede comprobarse efectuando cálculos análogos a los de antes). El proceso descrito permite utilizar aritmética con 4 bits para realizar operaciones que, realizadas de la forma usual, necesitarı́an más de 4 bits. Obsérvese que no se podrı́a, con este sistema multiplicar, por ejemplo, 60 × 60, ya que su resultado excede a m = 2730. Habrı́a que tomar, aquı́, otro valor de m mayor y otros valores mi . 2