数字のスパイラル

過去数日間、私はStackExchangeで整数のスパイラルに関する次の質問を調査してきました。 次の整数スパイラルの\(n\)番目の要素の座標の閉じた式を探しています。これは、原点から外側に、さらに無限に伸びています。:

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

まず、自然数を次のグループに分けます:

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

私たちは

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

グループ内の開始番号。

グループ内には、同じサイズの4つのサブグループがあります\(G_1\)\(G_1\)\(g_1 = \{ 1,2 \}, g_2 = \{ 3,4 \}, g_3 = \{ 5,6 \}, g_4 = \{7,8\}\) )。 \(n\)あるサブグループから次のサブグループに\(n\)れると、スパイラルのパス上の方向(この例では時計回り)も同時に変更されます。 グループ内の位置\(na^2\)サブグループ内の要素数で割ることにより、現在の方向\( b \in \{0,1,2,3\} \)を取得します。:

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

これで、グループ内の要素の数\(a+1\)の複数の\(b\)を最初の数\(a^2\)追加することにより、サブグループ\(g_n\)内の最初の要素を決定できます。:

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

今、私たちは簡単な観察によって決定することができます:

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

\(f(n)\)を閉じた表現で、大文字と小文字を区別せずに表現したいと思います。 Signum関数を使用しますここで手順説明しました\(n\)関数として純粋な式を取得するために、次のようになります。:

SVG.jsの助けを借りて、この小さな視覚化ですべてが実際に機能していることがわかります:

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

スパイラルはウラムのスパイラルとも呼ばれ、素数とエキサイティングな関係があります。

バック