Lo que no nos enseñaron en clase de matemáticas
Seguro que os pasó lo que a mí, y si no, tuvisteis mucha suerte: mis profesores de matemáticas no fueron precisamente los que hicieron que me gustaran... Más bien parecían empeñados en lo contrario.
Conjunción astral
Hace unos días se produjo una conjunción astral (ya sabéis los que me conocéis -o sobre los que ejerzo proselitismo salvaje- que astronomía sí, pero lo otro NO, así que no me entendáis mal ;-)) .
Estaba leyendo en Menéame un artículo sobre por qué el 1 dejó de ser un número primo porque me recordaba a lo de que Plutón ya no es un planeta y me acordé de que había comprado un par de libros de una nueva colección de RBA sobre matemáticas para ver qué tal eran, y uno de ellos hablaba precisamente de números primos.
Y cuando me puse a leerlos por encima vi una referencia a un tema que ya había visto en un documental sobre bosques y selvas de la serie Planeta Tierra de la BBC narrada por David Attenborough que me había pasado David Gutiérrez (y que yo también os recomiendo).
Vamos a ver de qué trata.
Planeta Tierra: Las Cigarras
Hay unas cigarras que viven durante mucho tiempo en estado de ninfa, de larva, y que una vez pasado ese tiempo despiertan lo justo para procrear y morir a continuación de reproducirse.
Ya el hecho de que dediquen la mayor parte de su vida en estado larvario para vivir como adultos unos pocos días es bastante impactante. Pero hay más.
Estas cigarras se llaman, respectivamente, Magicicada Tredecim y Magicicada Septendecim. Lo importante aquí es el apellido que, como podéis deducir, se refiere a un número. En concreto al 13 y al 17 respectivamente. ¿Y por qué?
Aquí viene lo interesante: tanto una como otra, como acabo de explicar, se pasan mucho tiempo en estado de ninfa, y sí, como habréis deducido, el primero se pasa 13 años en ese estado y el segundo 17. Exactos, ni más ni menos, siempre lo mismo. No se pasa uno 12 ó 14 años y de media 13, o el otro unas veces 16 años y otras 18 y de media 17. No. Siempre 13 años o siempre 17.
¿Y por qué esos números? Pues la explicación en si es sencilla: hay un parásito de ambas cigarras que tiene también un período de madurez largo, aunque no tanto, y pasa a la vida adulta cada 2 años.
Como las cigarras, vive el tiempo necesario para reproducirse y muere. ¿Y qué tiene que ver esto con los años que se pasa la cigarra en estado larvario? Aquí es donde entran las matemáticas, ésas que no nos enseñaron.
Aquí vienen unas pocas de matemáticas
Si os fijáis, tanto el número 13 como el número 17 son números primos. ¿Qué quiere decir esto? Que no pueden dividirse por otro número natural que no sea él mismo o el 1 para dar otro número natural.
Los números pares no son primos porque son divisibles por 2, exceptuando el propio 2 que sí que es primo.
Siguiendo hasta el 10, el 3 es primo, ya que no es divisible por ningún otro número. El 4, sin embargo, es par y es divisible por 2. El 5 es primo. El 6 es divisible por 3 y por 2, así que no. El 7 sí, pero el 8 de nuevo es divisible por 2. Y el 9 es divisible por 3, así que tampoco. El 10, divisible por 2 y por 5, así que no es primo.
Hay infinitos números primos y además no hay ninguna ecuación que nos diga si un número es primo o una función que nos permita predecir o calcular qué números serán primos. Es en definitiva un número muy interesante que da para mucho y que tiene muchas utilidades en la vida real, usándose en campos tan diversos como pueden ser la criptografía, la estadística, la ingeniería o la música.
Solución al misterio de las cigarras
¿Y por qué intervienen los números primos en este caso? El hecho de que las cigarras maduren a los 13 años o a los 17 y no en otro número evita que coincidan siempre con los parásitos, que lo hacen a los dos años.
Así, únicamente coincidirán con los parásitos cada 26 ó 34 años dependiendo de la cigarra, y no se los encontrarán también con esa misma frecuencia, por lo que una generación se podrá encontrar al parásito, pero la siguiente no. Pero además, entre ambas cigarras no se pisarán el terreno si no es cada 13 x 17 = 221 años.
Esto sucede porque al tratarse de números primos no permiten coincidencias con múltiplos o submúltiplos que no sean la multiplicación de ambos.
Pero bueno, ¿al final para qué os cuento todo esto?
Pues porque el uso de los números primos es bastante importante en programación y en la informática en general. Un ejemplo ya lo comenté: la criptografía, y en concreto el modelo RSA que está basado en el uso de números primos y en la inexistencia de una ecuación que los prediga obligando a un cálculo complicado con los medios actuales.
Además, muchas veces los puedes aplicar donde menos te lo esperas.
Recientemente he actualizado vBugMan incluyendo un refresco automático del panel principal. Para el que no lo haya visto, está compuesto por cuatro rejillas y cada una de ellas con su propia búsqueda.
Con el fin de optimizar su funcionamiento en internet y para evitar que la carga de las rejillas genere problemas al usuario (aunque no sean más que efectos del cursor, por ejemplo, mostrando el reloj de arena o esperas innecesarias), configuré los tiempos de tal forma que no coincidiera el refresco de las cuatro rejillas al mismo tiempo.
Para ello basta configurar un valor para el timer (intervalo de tiempo entre ejecución y ejecución de los procesos que cargan los registros de las rejillas) distinto para cada rejilla. Pero no me parecía bastante con eso ya que, conscientemente e inconscientemente, solemos poner tiempos que son múltiplos de 5 ó de 10, lo que haría que coincidieran las cargas al cabo de un tiempo.
Tampoco iba a poner a unos ciertos milisegundos y a los otros otra cantidad, porque de nuevo iba a usar cantidades que fueran múltiplos de 5 o de 10. Y tampoco iba a ponerlos porque sí, sin razonar.
Haciendo cálculos
Los tiempos iniciales que me había planteado como óptimos para cada refresco eran: 120, 160, 200 y 250 segundos. De esta forma, de inicio, el refresco de las rejillas no coincidiría siempre.
Haciendo unos cálculos podemos ver que los primeros que coincidirían (120 y 160) lo harían cada 480 segundos, es decir, cada 8 minutos (se calcula fácilmente a partir de la descomposición en números primos y calculando el mínimo común múltiplo: 120 = 2^3 * 3 * 5, 160 = 2^ 5 * 5 ---> 2^5 * 3 * 5 = 480).
Además, cada 40 minutos coincidirían 3 de los refrescos y los 4 se refrescarían de forma coincidente cada 3 horas y 20 minutos. Así que, aunque hubiera que esperar más de tres horas a que coincidieran los 4, las coincidencias de 3 y 2 refrescos me parecían demasiado frecuentes.
Recordé entonces la historia de la cigarra (que no la fábula de La cigarra y la hormiga) y me puse a buscar unos números primos que se adaptaran a los tiempos que quería poner. Al final, después de revisar una tabla de números primos y pensarlo un poco, usé los valores 127, 167, 227 y 257 para los valores en segundos.
De esta forma, los primeros que coincidirían serían los que tuvieran los tiempos de 127 y 167 y, para que sucediera, el panel debería estar abierto casi 6 horas (127 x 167 = 21.209 s ). Pero es que para que coincidan 3 de los refrescos, habría que esperar 55 días con el panel abierto.
Y ya, para que coincidan todos los refrescos al mismo tiempo, el panel debería estar abierto más de 39 años (127 x 167 x 227 x 257 = 1.237.311.851 s).
Esta última cifra da una idea bastante clara de la potencia del uso de los números primos y cómo se pueden aplicar de forma sencilla en programación e informática.