我正在编写一个代表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
例如,我的计算机无法计算出它,是否有更快的方法?
答案 0 :(得分:0)
您不需要计算中间值:
数字螺旋中的对角线,水平线和垂直线对应于以下形式的多项式
其中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