En spiral af tal

I de sidste par dage har jeg undersøgt følgende spørgsmål på StackExchange om en spiral af heltal. Vi leder efter en lukket formel for koordinaterne til \(n\) -th-elementet i det følgende heltalsspiral, der strækker sig fra oprindelsen til det ydre og længere og længere ind i uendelig:

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

Først opdeler vi de naturlige tal i følgende grupper:

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

Vi ringer

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

startnummeret i en gruppe.

Inden for en gruppe er der fire undergrupper af samme størrelse \(G_1\) For \(G_1\) \(g_1 = \{ 1,2 \}, g_2 = \{ 3,4 \}, g_3 = \{ 5,6 \}, g_4 = \{7,8\}\) ). Hvis \(n\) fra en undergruppe til den næste, ændres også retningen på spiralens sti (med uret i vores eksempel) på samme tid. Vi får den aktuelle retning \( b \in \{0,1,2,3\} \) ved at dividere positionen \(na^2\) inden for en gruppe med antallet af elementer i en undergruppe:

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

Nu kan vi bestemme det første element i en undergruppe \(g_n\) ved at tilføje et multipel \(b\) af antallet \(a+1\) af elementer i en gruppe til det oprindelige tal \(a^2\):

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

Nu kan vi bestemme ved simpel 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)$$

Vi vil repræsentere \(f(n)\) i en lukket repræsentation og også uden sagsforskelle. Vi bruger Signum-funktionen, jeg har beskrevet proceduren her . Så vi får en ren formel som en funktion af \(n\) , får vi:

Ved hjælp af SVG.js kan vi se i denne lille visualisering, at det hele virkelig fungerer:

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

Spiralen er også kendt som Ulams spiral og har en spændende relation til primtal.

Tilbage