螺旋形的数字

在过去的几天中,我一直在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$$

组中的起始编号。

在一个组中,有四个大小相等的子组\(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\)中的第\(a+1\)元素:

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

螺旋线也称为Ulam螺旋线,与质数有着令人兴奋的关系。

背部