首页 > 解决方案 > Ulam Spiral(对角线数)编写程序python

问题描述

我正在编写一个代表 Ulam Spiral Diagonal Numbers 的代码,这是我自己输入的代码

t = 1
i = 2
H = [1]


while i < 25691 :
    for n in range(4):
        t += i
        H.append(t)
    i += 2
print(H)

代码中的数字“25691”是螺旋的边长。如果是 7,那么螺旋将包含 49 个数字,依此类推。

这里 H 会给你所有的对角线数字。但我想知道是否有更快的方法来做到这一点。

例如,如果我大量增加边长,那么计算下一个 H 确实需要很长时间。

代码示例:

t = 1
i = 2
H = [1]

for j in range(25000,26000):
    while i < j :
        for n in range(4):
            t += i
        H.append(t)
    i += 2

例如我的计算机无法计算它,有没有更快的方法来做到这一点?

标签: python

解决方案


您不需要计算中间值:

数字螺旋中的对角线、水平线和垂直线对应于形式的多项式

在此处输入图像描述

其中 b 和 c 是整数常量。

维基百科

您可以通过求解两个数字的线性方程组来找到 b 和 c。

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

例如对于第1、2、11、28行等:

f(0) = 4*0*0+0*b+c = 1 => c = 1

f(1) = 4*1*1+1*b+ 1 = 2 => 5+b = 2 => b = -3

f(2) = 4*2*2+2*( -3 )+ 1 = 11

f(3) = 4*3*3+3*( -3 )+ 1 = 28


推荐阅读