我正在写一个代表乌兰姆螺旋对角线数字的代码,这是我自己键入的代码
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
例如,我的电脑无法计算,有没有更快的方法来计算?
不需要计算中间值:
数字螺旋中的对角线、水平线和垂直线对应于该形式的多项式 其中b和c是整数常数。
数字螺旋中的对角线、水平线和垂直线对应于该形式的多项式
其中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 + 一 = 二十八
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 + 一 = 二十八