Una espiral de números

Durante los últimos días, he estado investigando la siguiente pregunta en StackExchange sobre una espiral de números enteros. Estamos buscando una fórmula cerrada para las coordenadas del \(n\) -ésimo elemento en la siguiente espiral entera, que se expande desde el origen hacia afuera y más y más hasta el infinito.:

..  9 10 11 12
23  8  1  2 13
22  7  0  3 14
21  6  5  4 15
20 19 18 17 16

Primero dividimos los números naturales en los siguientes grupos:

$$G_1 = \{ 1,...,8 \}\\G_2 = \{ 9, ..., 24 \}\\G_3 = \{ 25, ... 48 \}\\...\\G_k = \left\{ (2k-1)^2, (2k+1)^2 - 1 \right\}$$

Llamamos

$$a^2 = \left(\left \lfloor \left( \frac{\left \lfloor \sqrt{n} \right \rfloor + 1}{2} \right) \right \rfloor \cdot 2 - 1 \right)^2$$

el número inicial en un grupo.

Dentro de un grupo hay cuatro subgrupos de igual tamaño \(G_1\) para \(G_1\) es \(g_1 = \{ 1,2 \}, g_2 = \{ 3,4 \}, g_3 = \{ 5,6 \}, g_4 = \{7,8\}\) ). Si \(n\) de un subgrupo al siguiente, la dirección de la trayectoria de la espiral (en el sentido de las agujas del reloj en nuestro ejemplo) también cambia al mismo tiempo. Obtenemos la dirección actual \( b \in \{0,1,2,3\} \) dividiendo la posición \(na^2\) dentro de un grupo por el número de elementos en un subgrupo:

$$b = \left \lfloor \frac{ n - a^2 }{ \text{abs}\left( a \right) + 1 } \right \rfloor$$

Ahora podemos determinar el primer elemento dentro de un subgrupo \(g_n\) agregando un múltiplo \(b\) del número \(a+1\) de elementos dentro de un grupo al número inicial \(a^2\):

$$c = a^2 + b \cdot (a+1)$$

Ahora podemos determinar por simple observación:

$$x_{right} = \left(n - c - \frac{ a + 1 }{2}+1\right),\, y_{right} = \left(\frac{ a + 1 }{2}\right) \\ x_{bottom} = \left(\frac{ a + 1 }{2}\right),\, y_{bottom} = (-1) \cdot \left( n - c - \frac{ a + 1 }{2}+1\right) \\ x_{left} = (-1) \cdot \left(n - c - \frac{ a + 1 }{2}+1\right),\, y_{left} = (-1) \cdot \left(\frac{ a + 1 }{2}\right) \\ x_{top} = (-1) \cdot \left(\frac{ a + 1 }{2}\right),\, y_{top} = \left( n - c - \frac{ a + 1 }{2}+1\right)$$

Queremos representar \(f(n)\) en una representación cerrada y también sin distinciones de casos. Usamos la función Signum, he descrito el procedimiento aquí . Para que obtengamos una fórmula pura en función de \(n\) , obtenemos:

Con la ayuda de SVG.js , podemos ver en esta pequeña visualización que todo realmente funciona:

See the Pen ulam spiral by David Vielhuber (@vielhuber) on CodePen.

La espiral también se conoce como espiral de Ulam y tiene una relación interesante con los números primos.

Atrás