Ir al contenido principal

Cuando los números salen a bailar: Divisible Sum Pairs

Cuando los números salen a bailar

Hay retos que parecen pedir fuerza bruta, como si fueran una pista de baile sin coreografía. El problema Divisible Sum Pairs de HackerRank es uno de esos: te da un arreglo de números y un divisor k, y te pide contar cuántos pares (i, j) cumplen que i < j y (ar[i] + ar[j]) mod k = 0.

Al principio, mi instinto fue el de todo programador que llega temprano a la fiesta: probar todos los pares posibles. Si dos números suman algo divisible entre k, los contamos. Simple, directo... y terriblemente lento.

La versión "obvia"

    Pros:
  • Es intuitiva: literalmente pruebas todos los pares.
  • Funciona: devuelve el resultado correcto.
    Contras:
  • Complejidad O(n²): cada número se compara con todos los anteriores.
  • Escala mal: si el arreglo crece, el algoritmo se convierte en un baile de tortugas.
  • Repite cálculos innecesarios: cada residuo se evalúa una y otra vez.

El análisis con IA

Cuando le mostré esto a Claude, me respondió con una solución que parecía salida de otro planeta. En lugar de comparar todos los pares, me habló de residuos que se complementan.

Su propuesta:

Al principio me pareció extraña. ¿Por qué hablar de residuos si el problema trata de sumas? Pero luego entendí: los residuos son los verdaderos protagonistas del baile.

La fiesta de los residuos

Imagina que los números son invitados en una fiesta temática. Cada uno llega con un número en la frente: su residuo al dividirse entre k.
  • Los que traen un 0 bailan entre ellos.
  • Los demás buscan pareja: si alguien tiene un 1, necesita encontrar a alguien con un k-1; si alguien tiene un 2, busca un k-2, y así sucesivamente.
  • Cuando se encuentran, hacen "match" y se cuentan como un par válido.

Mi primera solución era como revisar manualmente cada pareja en la pista. La optimizada, en cambio, es como tener un registro en la entrada: cada vez que llega un invitado, verificas si su pareja complementaria ya está dentro. Si sí, ¡boom!, se suma al contador.

La teoría detrás del baile

Lo anterior se llama aritmética modular y fue formalizada por Carl Friedrich Gauss en 1801 en su obra Disquisitiones Arithmeticae. Antes de él, Fermat, Euler y Legendre ya habían jugado con propiedades de divisibilidad, pero Gauss fue quien organizó todo en un sistema coherente.

Su notación ab (mod m) cambió la historia: permitió entender que los residuos no son "sobras", sino identidades equivalentes dentro de un sistema cerrado.

En este problema, la clave está en que dos números a y b cumplen (a + b) % k = 0 si sus residuos se complementan:

  • r1 + r2 ó
  • ambos son 0.

Lo que Gauss descubrió como una estructura matemática hoy se usa en criptografía, relojes, calendarios y, claro, en algoritmos que cuentan parejas sin sudar.

Comparación de estilos

AspectoFuerza brutaOptimizado
 Complejidad  O(n2 O(n) 
 Claridad  Intuitiva pero repetitiva  Requiere entender residuos 
 Escalabilidad  Mala  Excelente 
 Elegancia Baja  Alta 
 Metáfora  Organizador que revisa cada pareja  Registro con lista de complementos 

Conclusión

La fuerza bruta funciona, pero no baila bien. La versión optimizada usa la aritmética modular para convertir el caos en ritmo. Es el tipo de solución que te hace sentir que los números no solo obedecen reglas: también tienen estilo.

Epílogo: Gauss, el DJ de la fiesta

La música baja, las luces giran, y en la cabina aparece Carl Friedrich Gauss, el matemático que en 1801 decidió que los números también merecían una pista de baile. Con su obra Disquisitiones Arithmeticae, Gauss inventó la regla que todos seguimos en esta fiesta: los residuos no son sobras, son identidades.

Fermat y Euler habían dejado los instrumentos tirados por ahí, pero Gauss los afinó y puso orden. Desde entonces, cada número sabe con quién bailar: los ceros entre ellos, los unos con los doses, y así hasta completar el ritmo de k.

Hoy, cada vez que un algoritmo usa aritmética modular —ya sea para cifrar mensajes, calcular horarios o resolver retos de HackerRank—, Gauss sigue en la cabina, mezclando congruencias y divisibilidad como si fueran beats.

Comentarios

Entradas más populares de este blog

Los 1000 años de interés compuesto de Futurama

Si eres un treintañero y la gente que te rodea considera que eres infantil porque aun ves caricaturas, puedes revirar sus acusaciones y justificarte ante los ojos sin criterio y cortos de miras de esta falsa sociedad mencionando que no porque sean caricaturas significa que sean programas para niños, y que los chistes que parecen tontos en realidad son críticas mordaces que solo pueden ser comprendidos por mentes igual de mordaces. Después de argumentar exitosamente con estas réplicas es posible que muchas personas te vean con nuevos ojos y su opinión sobre ti mejore, pero la verdad es innegable: te gustan los monitos y los chistes tontos. Phillip J. Fry   Pero a veces hay información valiosa entre tanto chiste que fingimos entender, como en el capítulo Un pececillo de dólares/Un pescado millonario de la serie Futurama . Futurama fue creada por el mismo creador de Los Simpson , y narra las desventuras y sus conjuntos de Phillip J. Fry , un repartidor de pizzas que queda congelado ...

Quetzalcóatl viviendo en Japón

Fuerzas especiales Gyniu Disclaimer : esto no es una investigación sobre las deidades nahuathls, dragones ni otro tipo de seres mitológicos, solo quise plasmar algunas ideas sobre la curiosa representación de Quetalzcóatl ( la serpiente emplumada ) en un divertido ánime. Y primero que nada debo decir que este ánime es uno de los mejores que he visto últimamente. Estoy hablando, ni más ni menos, de La Sirviente Dragón de la señorita Kobayashi / Miss Kobayashi's Dragon Maid / Kobayashi-san no Maid Dragon (y no digo que es el mejor que he visto últimamente porque al momento de escribir esto se está transmitiendo la segunda temporada de Aquella vez que me convertí en Slime / That time I got reincarnated as a Slime / Tensei Shitara Slime Datta Ken ). Dando una descripción rápida: una joven se va de juerga al bosque, encuentra un dragón gigante, y lo invita a su casa; al siguiente día dicho dragón llega a la casa de la juerguista. En realidad el dragón es dragona , de nombre Tohru ...

Goblin Slayer por JRR Tolkien

Mi esposa y yo terminamos de ver el ánime Goblin Slayer , una historia que al inicio parecía un agradable paseo por un reino estilo medieval donde la magia abunda, y que casi de inmediato se transforma en algo más oscuro, enfocado exclusivamente a un público maduro. En el ánime vemos la historia de un "aventurero" que solo se dedica a cazar duendes/trasgos , contada desde el punto de vista de una maga que se une a él. Los puntos fuertes son las batallas que los protagonistas sostienen en contra de unos agresivos duendes que amenazan a los habitantes de los pueblos de la región. En realidad la historia original fue publicada en formato de novela ligera, y fue escrita por Kumo Kagyu e ilustrada por Noboru Kannatsuki ; después fue adaptada al manga por Kōsuke Kurose y Masahiro Ikeno , y finalmente el ánime fue producido por el estudo White Fox y fue emitido originalmente entre el 6 de octubre al 29 de diciembre de 2018. Aparte de los ya mencionados agresivos duendes...