代码之家  ›  专栏  ›  技术社区  ›  seVenVo1d

编写程序python的ulam spiral(用于对角线数)

  •  0
  • seVenVo1d  · 技术社区  · 7 年前

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

    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 回复  |  直到 7 年前
        1
  •  0
  •   Jonas    7 年前

    不需要计算中间值:

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

    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= = & gt; C=1

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

    f(2)=4*2*2+2*( - 3 + = 十一

    f(3)=4*3*3+3*( - 3 + = 二十八