问题可以分为4个部分:找到每个象限中对角线上的数字。有四个象限,所以我们有四个轮辐:
- 西北(NW)轮辐
- 东北(NE)轮辐
- 西南(SW)轮辐
- 东南(SE)轮辐
例如,在您的乌拉姆螺旋图中,当N为偶数时。
- NW轮辐有1、7...
- NE轮辐有2、10...
- SW轮辐有4、16...
- SE轮辐有3、13...
问题进一步分为两种情况:
- N为偶数。
- N为奇数。
情况1:N为偶数
这里是每个轮辐的公式:
NW spoke: f(n) = 4*n*n + 2*n + 1
NE spoke: g(n) = 4*n*n + 4n + 2
SW spoke: h(n) = 4*n*n + 8*n + 4
SE spoke: i(n) = 4*n*n + 6*n + 3
其中 n = 0, 1, 2, ...
对于 4x4 矩阵,计算以下集合:
{f(0), f(1), g(0), g(1), h(0), h(1), i(0), i(1)}
它产生了对角线上的值:
{1, 7, 2, 10, 4, 16, 3, 13}
一般来说,对于一个N x N的矩阵,当N为偶数时,计算以下集合以获取对角线上的值:
{ f(0), ..., f(N/2 - 1),
g(0), ..., g(N/2 - 1),
h(0), ..., h(N/2 - 1),
i(0), ..., i(N/2 - 1) }
案例2:N为奇数
在您的乌拉姆螺旋图示中,当N为奇数时,每个轮辐的公式如下:
NW spoke: f(n) = 4*n*n + 2*n + 1
NE spoke: g(n) = 4*n*n + 4*n + 1
SW spoke: h(n) = 4*n*n + 1
SE spoke: i(n) = 4*n*n - 2*n + 1
其中n = 0, 1, 2, ...
请注意,f(0) = g(0) = h(0) = i(0) = 1。
对于3x3,计算以下集合:
{f(0), f(1), g(1), h(1), i(1)}
它产生以下对角线值:
{1, 7, 9, 5, 3}.
一般来说,对于一个NxN的矩阵,在N为奇数时,计算以下集合以获取对角线上的值:
{ f(0), ..., f((N - 1)/2,
g(0), ..., g((N - 1)/2),
h(0), ..., h((N - 1)/2),
i(0), ..., i((N - 1)/2) }
PHP代码
最后,这是一个演示我上面所讨论的内容的PHP程序。
<?php
function ulam_diag($N)
{
$result = array();
if ($N
for ($n = 0; $n < $N / 2; $n++) {
$result[] = 4*$n*$n + 2*$n + 1;
$result[] = 4*$n*$n + 4*$n + 2;
$result[] = 4*$n*$n + 8*$n + 4;
$result[] = 4*$n*$n + 6*$n + 3;
}
} else {
$result[] = 1;
for ($n = 1; $n <= ($N - 1) / 2; $n++) {
$result[] = 4*$n*$n + 2*$n + 1;
$result[] = 4*$n*$n + 4*$n + 1;
$result[] = 4*$n*$n + 1;
$result[] = 4*$n*$n - 2*$n + 1;
}
}
sort($result);
return $result;
}
print_r(ulam_diag(4));
print_r(ulam_diag(3));
?>
输出:
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 7
[5] => 10
[6] => 13
[7] => 16
)
Array
(
[0] => 1
[1] => 3
[2] => 5
[3] => 7
[4] => 9
)
这里是一个 Ideone 上的代码: http://ideone.com/F9jaC0
如果您想知道我是如何得出这些公式的,那么 Ulam 螺旋的四个轮辐已经有了成熟的结果。以下是参考资料:
- https://oeis.org/A054569 (你的插图中的西北轮辐)
- https://oeis.org/A016754 (你的插图中的东北轮辐)
- https://oeis.org/A053755 (你的插图中的西南轮辐)
- https://oeis.org/A054554 (你的插图中的东南轮辐)
你的插图中的 Ulam 螺旋与流行的 Ulam 螺旋表示方式不同,因此我采用了这些众所周知的结果,并调整了每个公式的 n 偏移量,以使其适用于你的 Ulam 螺旋。这些调整留给读者作为练习。;-)