În ultimele zile, am studiat următoarea întrebare pe StackExchange despre o spirală de numere întregi. Căutăm o formulă închisă pentru coordonatele elementului \(n\) -th din următoarea spirală întreagă, care se extinde de la origine la exterior și tot mai departe în infinit:
.. 9 10 11 12
23 8 1 2 13
22 7 0 3 14
21 6 5 4 15
20 19 18 17 16
Mai întâi împărțim numerele naturale în următoarele grupuri:
$$G_1 = \{ 1,...,8 \}\\G_2 = \{ 9, ..., 24 \}\\G_3 = \{ 25, ... 48 \}\\...\\G_k = \left\{ (2k-1)^2, (2k+1)^2 - 1 \right\}$$
Noi sunam
$$a^2 = \left(\left \lfloor \left( \frac{\left \lfloor \sqrt{n} \right \rfloor + 1}{2} \right) \right \rfloor \cdot 2 - 1 \right)^2$$
numărul de plecare dintr-un grup.
În cadrul unui grup există patru subgrupuri de dimensiuni egale \(G_1\) Pentru \(G_1\) este \(g_1 = \{ 1,2 \}, g_2 = \{ 3,4 \}, g_3 = \{ 5,6 \}, g_4 = \{7,8\}\) ). Dacă \(n\) la un subgrup la altul, direcția pe calea spiralei (în sensul acelor de ceasornic în exemplul nostru) este, de asemenea, modificată în același timp. \( b \in \{0,1,2,3\} \) direcția curentă \( b \in \{0,1,2,3\} \) împărțind poziția \(na^2\) într-un grup la numărul de elemente dintr-un subgrup:
$$b = \left \lfloor \frac{ n - a^2 }{ \text{abs}\left( a \right) + 1 } \right \rfloor$$
Acum putem determina primul element dintr-un subgrup \(g_n\) adăugând un număr multiplu \(b\) al numărului \(a+1\) al elementelor dintr-un grup la numărul inițial \(a^2\):
$$c = a^2 + b \cdot (a+1)$$
Acum putem determina prin simpla observație:
$$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)$$
Vrem să reprezentăm \(f(n)\) într-o reprezentare închisă și, de asemenea, fără distincții de caz. Folosim funcția Signum, am descris procedura aici . Pentru a obține o formulă pură în funcție de \(n\) , obținem:
Cu ajutorul SVG.js , putem vedea în această vizualizare mică că totul funcționează cu adevărat:
See the Pen ulam spiral by David Vielhuber (@vielhuber) on CodePen.
Spirala este, de asemenea, cunoscută sub numele de spirala lui Ulam și are o relație interesantă cu numerele prime.