Cuadrícula de números primos
(susam.net)- Cuadrícula de números primos es una herramienta que muestra visualmente los patrones y la estructura de los números primos.
- Esta cuadrícula organiza los números en una forma bidimensional, lo que permite ver de un vistazo cómo se distribuyen los números primos.
- Al analizar los patrones, es posible obtener ideas sobre la regularidad o aleatoriedad de los números primos.
- Ayuda a que estudiantes de programación y matemáticas comprendan la teoría de los números primos de manera intuitiva.
- Puede usarse como material de referencia para explorar la distribución de los primos desde distintos ángulos.
Descripción general de la cuadrícula de números primos
- Esta herramienta organiza números en una cuadrícula bidimensional y su objetivo es distinguir visualmente si cada celda corresponde o no a un número primo.
- El usuario puede definir el rango de filas y columnas para generar cuadrículas de distintos tamaños y formas.
- Dentro de la cuadrícula, los números primos se distinguen claramente mediante colores o marcas, lo que permite ver de inmediato cómo están distribuidos.
- Facilita explorar patrones como distribuciones regulares, diagonales y clústeres, y sirve como material para fortalecer la intuición matemática.
- La herramienta ofrece una fuente de referencia útil para desarrolladores y estudiantes en trabajos de algoritmos o visualización.
Características y ejemplos de uso
- La posición de cada número refleja el resultado de una verificación rápida de si es primo.
- Puede procesar una gran cantidad de números a la vez, lo que permite explorar incluso la distribución de primos grandes.
- Es fácil de personalizar con distintas formas de cuadrícula, como cuadrados y rectángulos.
- Es valiosa como material de aprendizaje y análisis en educación matemática, investigación de algoritmos y presentaciones visuales.
- Puede aplicarse no solo a la exploración matemática, sino también a retos de programación, entrevistas y otros ámbitos diversos.
1 comentarios
Comentarios en Hacker News
¡Hola! Anoche, por diversión, hice esta sencilla herramienta de visualización de rejillas de números primos. Me inspiré en una publicación de "Show HN" que encontré por casualidad hace unos días: post. Usa la prueba de primalidad de Miller-Rabin y toma como base los primos de la secuencia OEIS A014233, así que puede determinar primalidad incluso hasta 3317044064679887385961980. Como ejemplo, pueden ver este enlace. Los tres círculos que aparecen ahí representan los siguientes primos: 3317044064679887385961783
3317044064679887385961801
3317044064679887385961813
Espero que también les resulte divertido.
¡La visualización está genial! Estaría bueno agregar una función que muestre qué primo es cuando pasas el cursor sobre un punto. También me da curiosidad si aparecerían nuevos patrones si aumentas en X la cantidad de columnas en cada fila, o si haces que X sea un primo.
¡Gracias por hacerlo! Es muy entretenido ir aumentando rápido la cantidad de columnas y descubrir patrones repetidos, pequeños movimientos en espiral o líneas que se curvan mucho. Cuando era niño me encantaba la parte de rompecabezas lógicos de las matemáticas, pero en los últimos años de secundaria y en la universidad las matemáticas se me hicieron difíciles porque se volvieron cada vez más abstractas. Si hubiera tenido herramientas de visualización como esta, creo que habría sentido los conceptos matemáticos de forma más concreta y habría seguido con curiosidad por las relaciones escondidas detrás de las fórmulas.
También sería muy interesante una función para cambiar la base numérica a 16 o a otras bases. Me da mucha curiosidad qué cambios de patrones aparecerían.
¡Está increíble! Al ver lo que hiciste, yo también me puse a buscar patrones por mi cuenta y me clavé muchísimo en la parte visual :D Pero como puedes ordenar libremente las columnas y las filas, al final siento que mi intento no significó gran cosa :D
Comparto una forma rara de hacerlo: tomo los enteros en paquetes de 100. Si un paquete contiene un primo, lo pinto de negro; si no, de rojo. El primer paquete contiene 100 enteros consecutivos, el segundo contiene uno cada dos números, el tercero uno cada tres números, y así sucesivamente. Cada paquete empieza donde terminó el anterior. La fila 1 tiene un paquete, la 2 tiene dos, la 3 tiene tres... y así. Aquí hay una imagen. Parece una especie de jeroglífico de otro universo. Todavía no entiendo bien por qué se ve así. Para compararlo con una distribución aleatoria, se puede cambiar el código así: if (isPrime(myNum)) return 1; por if (Math.random()>0.99) return 1; y la diferencia es clarísima. De verdad me intriga de dónde salen la simetría y las propiedades de estos patrones basados en primos.
Este comentario explica bien la imagen. En esencia, visualiza gcd(x,y), y casi no tiene que ver con los primos. Saber eso ayuda a entender mucho mejor el origen de varios patrones. Aun así, sigue siendo una visualización muy interesante.
La explicación es un poco distinta del código enlazado. No es que el paquete N esté lleno de enteros separados por N, sino que cada paquete de la fila N contiene enteros separados por N. Por ejemplo, el primer paquete de la segunda fila es {101, 103, 105, ..., 299}, y el segundo paquete es {102, 104, 106, ..., 300}. Entendiendo este principio, el patrón queda bien explicado en este comentario.
Me clavé bastante con esta idea. Al principio pensé que sería fácil conectarla con la espiral de Ulam, pero este rabbit hole lleva a residuos polinomiales y a la misteriosa "Conjecture F" (explicación). En este enlace hay una explicación más detallada de parallax primes y contexto relacionado; en especial me dejó muy satisfecho la interpretación geométrica en esta página.
Probé jugar con eso de esta forma: ejemplo. Descubrí que si repites solo paquetes pares o solo impares, el patrón en verdad converge. Es muy curioso.
También quisiera sugerir que pruebes dibujar una espiral de Ulam wiki de Ulam spiral. Y si esto fuera el estado inicial del Game of Life de Conway, me da mucha curiosidad si evolucionarían patrones interesantes. Si haces brute-force con rejillas iniciales de varios tamaños, tal vez podrías seleccionar juegos que duren más de cierta cantidad de pasos para que luego una persona los observe directamente. Si alguna rejilla pequeña o espiral específica de primos produce algo especial, capaz que HN se emociona bastante.
No es exactamente lo mismo, pero hace más de 10 años hice un generador de espirales de Ulam. Enlace. Este no marca solo primos: el tamaño del punto depende de cuántos divisores pares tiene el número en esa posición.
Otro voto a favor de la espiral de Ulam. Al principio me pregunté por qué no aparecían diagonales. Yo esperaba la espiral de Ulam.
Otra herramienta de Ulam spiral
Mi intuición sobre los primos era que se vuelven rarísimos muy rápido, pero en realidad hay muchísimos.
En realidad, los primos sí se vuelven cada vez más difíciles de encontrar. Por ejemplo, si dibujas todos los primos en una sola fila, se nota clarísimo la diferencia (mira aquí). El famoso teorema de los números primos en teoría de números trata justamente de esto. La cantidad de primos menores o iguales que n se aproxima por n/log n, y la densidad de primos cerca de n converge a 1/log n. También puedes ver mi explicación del teorema de los números primos y Wikipedia.
Se ha investigado muchísimo sobre este tema Wikipedia
La mayoría de la gente piensa eso. Creo que es porque aprendemos que encontrar primos es difícil. En realidad, encontrar primos no es difícil. Lo que nos parece difícil es decidir si un entero dado es primo. De hecho, hay más primos que cuadrados perfectos.
Cuando el valor de cols (columnas) es primo, los patrones se ven increíbles.
Cuando columns es un primo p, los números de cada columna tienen el mismo residuo módulo p. Entonces los múltiplos de p dejan de ser primos, y por eso aparecen patrones diagonales.
Más que cuando la cantidad de columnas es prima, también salen patrones interesantes cuando cols+1 o cols-1 tienen muchos divisores, por ejemplo 25, 91, 119. También es interesante que los números cercanos a un primo tengan muchos divisores.
Cuando hay 7 columnas se ven muchas diagonales que van de arriba a la derecha hacia abajo a la izquierda, y con 5 columnas van de arriba a la izquierda hacia abajo a la derecha. También me da curiosidad la frecuencia de sexy primes consecutivos. Quisiera saber si este patrón se rompe con números grandes.
Los patrones cuando cols % 30 == 0 (30, 60, 90, 120, etc.) son realmente interesantes. Las líneas verticales rectas se ven muy claras. Si le sumas o restas 1 (119 o 121), parece que las líneas “giran” hacia la izquierda o hacia la derecha. Es una herramienta de visualización realmente genial.
La mayoría de los patrones que se ven en realidad no son propiedades de los primos. Si marcas solo los números que no son divisibles por los primeros 100 naturales, la imagen sale casi igual.
Hace poco yo también hice una herramienta de visualización de primos:
https://ilmenit.github.io/prime-fold/
No es solo para visualizar, también sirve para encontrar funciones matemáticas que generan o contienen primos usando algoritmos evolutivos y funciones de fitness.
Modo PrimeFold (embedding 2D): introduces o haces evolucionar dos funciones, f_x(n) y f_y(n), para mapear números a coordenadas 2D. Visualiza los primos y los compuestos de forma distinta. Ejemplo: f_x(n) = n, f_y(n) = n^2.
Modo PrimeGen (generación 1D): introduces o haces evolucionar una sola función f(n) para crear una secuencia numérica. Visualiza si cada valor de salida es primo y cuántos primos únicos hay. Ejemplo: f(n) = 2*n + 1
Si lo configuras en 1, 7, 100, da la sensación de ver un ticker de constelaciones como los chevrons de Stargate :D
En este enlace, si haces zoom out y subes o bajas el valor de cols de uno en uno, se pueden observar cambios en los patrones. Los cambios de -7 a +5 son impactantes. En #1-200-420 pasa lo mismo.
Por ocio, comparé en Python las cifras de las unidades (en base 10) de primos consecutivos y encontré relaciones interesantes. Como 2 y 5 solo aparecen una vez, los excluí, y luego conté las frecuencias de transiciones entre dígitos: 1->3, 1->5, etc. Como pensaba que los primos eran aleatorios, imaginé que las frecuencias serían casi iguales, pero en realidad había diferencias estadísticamente significativas. Aún nadie sabe por qué.
Mi intuición me decía que los primos eran muchísimo más raros y que esa disminución se aceleraba mucho con números grandes, pero en realidad sigue habiendo muchísimos. Incluso en [1, 10,000, 10,000], la parte de abajo sigue bastante densa. Claro, sí se vuelve menos densa. El espacio promedio entre primos es
log(n)(prime number theorem).