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

Documentos relacionados