Una spirale di numeri

Negli ultimi giorni, ho studiato la seguente domanda su StackExchange su una spirale di numeri interi. Stiamo cercando una formula chiusa per le coordinate del \(n\) -esimo elemento nella seguente spirale intera, che si estende dall'origine verso l'esterno e sempre più all'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

Per prima cosa dividiamo i numeri naturali nei seguenti gruppi:

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

Noi chiamiamo

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

il numero di partenza in un gruppo.

All'interno di un gruppo ci sono quattro sottogruppi di uguale dimensione \(G_1\) per \(G_1\) è \(g_1 = \{ 1,2 \}, g_2 = \{ 3,4 \}, g_3 = \{ 5,6 \}, g_4 = \{7,8\}\) ). Se \(n\) da un sottogruppo al successivo, viene modificata contemporaneamente anche la direzione sul percorso della spirale (nel nostro esempio in senso orario). Otteniamo la direzione corrente \( b \in \{0,1,2,3\} \) dividendo la posizione \(na^2\) all'interno di un gruppo per il numero di elementi in un sottogruppo:

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

Ora possiamo determinare il primo elemento all'interno di un sottogruppo \(g_n\) aggiungendo un multiplo \(b\) del numero \(a+1\) di elementi all'interno di un gruppo al numero iniziale \(a^2\):

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

Ora possiamo determinare con una semplice osservazione:

$$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)$$

Vogliamo rappresentare \(f(n)\) in una rappresentazione chiusa e anche senza distinzioni di casi. Usiamo la funzione Signum, ho descritto la procedura qui . In modo da ottenere una formula pura in funzione di \(n\) , otteniamo:

Con l'aiuto di SVG.js , possiamo vedere in questa piccola visualizzazione che tutto funziona davvero:

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

La spirale è anche conosciuta come la spirale di Ulam e ha una relazione entusiasmante con i numeri primi.

Indietro