Depuis quelques jours, j'étudie la question suivante sur StackExchange sur une spirale d'entiers. Nous recherchons une formule fermée pour les coordonnées du \(n\) -ème élément dans la spirale entière suivante, qui s'étend de l'origine vers l'extérieur et de plus en plus loin dans l'infini:
.. 9 10 11 12
23 8 1 2 13
22 7 0 3 14
21 6 5 4 15
20 19 18 17 16
Commençons par diviser les nombres naturels dans les groupes suivants:
$$G_1 = \{ 1,...,8 \}\\G_2 = \{ 9, ..., 24 \}\\G_3 = \{ 25, ... 48 \}\\...\\G_k = \left\{ (2k-1)^2, (2k+1)^2 - 1 \right\}$$
Nous appelons
$$a^2 = \left(\left \lfloor \left( \frac{\left \lfloor \sqrt{n} \right \rfloor + 1}{2} \right) \right \rfloor \cdot 2 - 1 \right)^2$$
le numéro de départ dans un groupe.
Dans un groupe, il y a quatre sous-groupes de taille égale \(G_1\) pour \(G_1\) c'est \(g_1 = \{ 1,2 \}, g_2 = \{ 3,4 \}, g_3 = \{ 5,6 \}, g_4 = \{7,8\}\) ). Si \(n\) d'un sous-groupe au suivant, la direction sur le chemin de la spirale (dans le sens des aiguilles d'une montre dans notre exemple) est également modifiée en même temps. On obtient la direction courante \( b \in \{0,1,2,3\} \) en divisant la position \(na^2\) dans un groupe par le nombre d'éléments dans un sous-groupe:
$$b = \left \lfloor \frac{ n - a^2 }{ \text{abs}\left( a \right) + 1 } \right \rfloor$$
Nous pouvons maintenant déterminer le premier élément d'un sous-groupe \(g_n\) en ajoutant un multiple \(b\) du nombre \(a+1\) d'éléments dans un groupe au nombre initial \(a^2\):
$$c = a^2 + b \cdot (a+1)$$
Maintenant, nous pouvons déterminer par simple observation:
$$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)$$
Nous voulons représenter \(f(n)\) dans une représentation fermée et également sans distinction de cas. Nous utilisons la fonction Signum, j'ai décrit la procédure ici . Pour obtenir une formule pure en fonction de \(n\) , nous obtenons:
Avec l'aide de SVG.js , nous pouvons voir dans cette petite visualisation que tout fonctionne vraiment:
See the Pen ulam spiral by David Vielhuber (@vielhuber) on CodePen.
La spirale est également connue sous le nom de spirale d'Ulam et a une relation passionnante avec les nombres premiers.