🧮 Computational Mathematics

Inicio · Parte 04 — Matemática discreta para computación

098 — Aritmética modular

intermedio clase 18 de 20 4 horas demostración modular_arithmetic

La aritmética modular opera con restos y hace factible exponenciar números enormes.

Fórmulas

(a + b) mod n = ((a mod n) + (b mod n)) mod n
pequeño teorema de Fermat: a^(p−1) ≡ 1 (mod p) si p es primo y p ∤ a
inverso modular: a·a⁻¹ ≡ 1 (mod n), existe si mcd(a,n) = 1

Desarrollo

La aritmética modular trabaja con las clases de equivalencia que la clase 085 definió: dos números son «el mismo» si difieren en un múltiplo de n. Sobre esas clases, la suma y el producto están bien definidos, y esa buena definición es lo que permite reducir en cada paso en lugar de al final.

Esa reducción es lo que hace viable la exponenciación modular. Calcular 7¹²⁸ mod 13 sin reducir exigiría un número de 108 dígitos; con exponenciación binaria y reducción en cada paso, son siete multiplicaciones de números pequeños. pow(base, exp, mod) en Python implementa exactamente eso.

El pequeño teorema de Fermat —a^(p−1) ≡ 1 (mod p) para p primo— es la base de los tests de primalidad probabilísticos y de RSA. El inverso modular existe cuando mcd(a, n) = 1 y se calcula con el algoritmo de Euclides extendido; Python lo expone como pow(a, -1, n) desde la versión 3.8.

Estas operaciones sostienen buena parte de la infraestructura digital: RSA, Diffie- Hellman, curvas elípticas, funciones hash, sumas de comprobación y generadores congruenciales de números pseudoaleatorios. La seguridad de varios de esos sistemas descansa en que la operación inversa —el logaritmo discreto— es computacionalmente difícil.

Ejemplo trabajado

Exponenciación e inverso modular.

7¹²⁸ mod 13 = 3
  (sin reducir, 7¹²⁸ tendría 109 dígitos)

Pequeño teorema de Fermat (p = 13 primo):
  7¹² mod 13 = 1                        ✓

Inverso de 7 módulo 13:
  pow(7, -1, 13) = 2
  verificación: 7·2 = 14 ≡ 1 (mod 13)   ✓

Suma modular: (25 + 30) mod 13 = 55 mod 13 = 3

Qué calcula el laboratorio

Aritmética modular: exponenciación rápida e inverso modular.

python classes/part-04-matematica-discreta-para-computacion/098-aritmetica-modular/lab.py
compmath run 098

Salidas del laboratorio (6)

Muestra de la ejecución real

{
  "7^128 mod 13": 3,
  "pequeño_teorema_de_fermat": 1,
  "inverso_de_7_mod_13": 2,
  "verificacion_inverso": 1,
  "suma_modular": 3,
  "usos": "hashing, criptografía, checksums y generadores pseudoaleatorios"
}

Errores comunes

Dónde se usa

RSA y Diffie-Hellman, funciones hash, sumas de comprobación, generadores pseudoaleatorios y aritmética de campos finitos.

Idea rectora de la parte

Un DAG sin orden topológico contiene un ciclo: es un diagnóstico, no un error.

Error a evitar

Asumir que un grafo dirigido es acíclico sin verificarlo.

Conexión con IA

Los grafos de cómputo, la búsqueda en árbol y las GNN son estructuras discretas; el conteo sostiene la probabilidad que después usa todo modelo generativo.

Bibliografía de la clase

Archivos de la clase