Teorema Chino de los Restos (CRT) – Explicación y aplicación en programación
El Teorema Chino de los Restos es una herramienta poderosa en aritmética modular, que permite resolver sistemas de congruencias simultáneas de forma eficiente. Tiene aplicaciones directas en criptografía (RSA), optimización de cálculos, programación paralela, sistemas distribuidos, sincronización y teoría de números computacional.
Relacionado: Pequeno-Teorema-de-Fermat, Congruencias, Criptografía AES.
¿Qué dice el Teorema Chino de los Restos?
Dado un sistema de congruencias:
Si los módulos son pares mutuamente coprimos (es decir, gcd(mi,mj)=1$$$$\gcd(m_i, m_j) = 1 para , entonces existe una única solución módulo
¿Qué significa?
Puedes encontrar un solo número x tal que cumple todas las congruencias del sistema, y además:
️ En programación: ¿para qué sirve?
1. Criptografía: RSA optimizado
En RSA, la operación de descifrado puede acelerarse usando CRT:
-
En lugar de calcularcon un
ngrande, -
Se calcula con pp y qq (factores de
n), más pequeños:
m1 = c^d mod p
m2 = c^d mod qLuego se usa CRT para recomponer el resultado final.
️ 2. Sincronización de ciclos
Ejemplo:
-
Tren A pasa cada 3 minutos, tren B cada 5 minutos.
-
¿Cuándo coinciden ambos otra vez?
→ Resolver:
3. Optimización de grandes cálculos
En cálculos con enteros enormes, se pueden hacer módulos más pequeños en paralelo (residuos), y luego recomponer el resultado final con CRT.
️ Esto se usa en:
-
Procesadores RNS (Residue Number Systems).
-
Sistemas distribuidos.
-
Compresión y cifrado.
Cómo resolverlo en la práctica
Supongamos:
Paso 1: Calcular el producto total M=3⋅4⋅5=60M = 3 \cdot 4 \cdot 5 = 60
Paso 2: Para cada congruencia:
- Mi=M/miM_i = M / m_i $$ - yi=Mi−1mod miy_i = M_i^{-1} \mod m_i $$ - Sumar: x=∑ai⋅Mi⋅yimod Mx = \sum a_i \cdot M_i \cdot y_i \mod MEjemplo en Python
def extended_gcd(a, b):
if b == 0:
return a, 1, 0
d, x1, y1 = extended_gcd(b, a % b)
return d, y1, x1 - (a // b) * y1
def modinv(a, m):
d, x, _ = extended_gcd(a, m)
if d != 1:
raise ValueError("No hay inverso")
return x % m
def crt(congruencias):
M = 1
for _, m in congruencias:
M *= m
x = 0
for a_i, m_i in congruencias:
M_i = M // m_i
y_i = modinv(M_i, m_i)
x += a_i * M_i * y_i
return x % MUso:
congs = [(2, 3), (3, 4), (1, 5)]
print("Solución CRT:", crt(congs)) # → 11️ Verificación:
-
11mod 3=211 \mod 3 = 2
-
11mod 4=311 \mod 4 = 3
-
11mod 5=111 \mod 5 = 1
Conclusión
El Teorema Chino de los Restos es una joya de la teoría de números que se aplica directamente en programación avanzada, sobre todo cuando se requiere:
-
trabajar con módulos distintos simultáneamente,
-
acelerar cálculos grandes dividiendo en partes pequeñas,
-
mantener exactitud con enteros grandes,
-
o combinar soluciones congruentes en criptografía, redes o sistemas distribuidos.
¿Quieres que te prepare un ejemplo con RSA donde se use el CRT para descifrar más rápido, o una visualización paso a paso de cómo se recombinan las congruencias en Python?