Dum la pasintaj tagoj mi esploris la jenan demandon pri StackExchange pri spiralo de entjeroj. Ni serĉas fermitan formulon por la koordinatoj de la \(n\) -a elemento en la sekva entjera spiralo, kiu etendiĝas de la origino al la ekstero kaj pli kaj pli ĝis malfinio:
.. 9 10 11 12
23 8 1 2 13
22 7 0 3 14
21 6 5 4 15
20 19 18 17 16
Unue ni dividas la naturajn nombrojn en la jenajn grupojn:
$$G_1 = \{ 1,...,8 \}\\G_2 = \{ 9, ..., 24 \}\\G_3 = \{ 25, ... 48 \}\\...\\G_k = \left\{ (2k-1)^2, (2k+1)^2 - 1 \right\}$$
Ni vokas
$$a^2 = \left(\left \lfloor \left( \frac{\left \lfloor \sqrt{n} \right \rfloor + 1}{2} \right) \right \rfloor \cdot 2 - 1 \right)^2$$
la komenca numero en grupo.
Ene de grupo estas kvar \(g_1 = \{ 1,2 \}, g_2 = \{ 3,4 \}, g_3 = \{ 5,6 \}, g_4 = \{7,8\}\) \(G_1\) Por \(G_1\) estas \(g_1 = \{ 1,2 \}, g_2 = \{ 3,4 \}, g_3 = \{ 5,6 \}, g_4 = \{7,8\}\) ). Se \(n\) de unu subgrupo al la sekva, la direkto sur la vojo de la spiralo (dekstrume en nia ekzemplo) ankaŭ ŝanĝiĝas samtempe. Ni ricevas la nunan direkton \( b \in \{0,1,2,3\} \) dividante la pozicion \(na^2\) ene de grupo per la nombro da elementoj en subgrupo:
$$b = \left \lfloor \frac{ n - a^2 }{ \text{abs}\left( a \right) + 1 } \right \rfloor$$
Nun ni povas determini la unuan elementon ene de subgrupo \(g_n\) aldonante multoblon \(b\) de la nombro \(a+1\) de elementoj en grupo al la komenca nombro \(a^2\):
$$c = a^2 + b \cdot (a+1)$$
Nun ni povas determini per simpla observado:
$$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)$$
Ni volas reprezenti \(f(n)\) en fermita reprezento kaj ankaŭ sen kazaj distingoj. Ni uzas la funkcion Signum, mi priskribis la procedon ĉi tie . Por ke ni ricevu puran formulon kiel funkcio de \(n\) , ni ricevas:
Kun la helpo de SVG.js , ni povas vidi en ĉi tiu eta bildigo, ke la afero vere funkcias:
See the Pen ulam spiral by David Vielhuber (@vielhuber) on CodePen.
La spiralo ankaŭ estas konata kiel la spiralo de Ulam kaj havas ekscitan rilaton al primoj.