Ulam Spiral(用于对角线数字)编写程序python

时间:2018-06-19 13:41:55

标签: python

我正在编写一个代表Ulam螺旋对角线数字的代码,这是我自己键入的代码

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

例如,我的计算机无法计算出它,是否有更快的方法?

1 个答案:

答案 0 :(得分:0)

您不需要计算中间值:

  

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

     

enter image description here

     

其中b和c是整数常量。

wikipedia

您可以通过求解两个数字的线性方程组来找到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