python - 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
例如我的计算机无法计算它,有没有更快的方法来做到这一点?
解决方案
您不需要计算中间值:
数字螺旋中的对角线、水平线和垂直线对应于形式的多项式
其中 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
推荐阅读
- python - 使用 Pymongo / MongoDB 迭代游标对象的有效方法
- java - 无法加载 groovy 类
- c# - Xamarin 从 imageButton 保存图像
- android - 未找到 IntelliJ IDEA Android 应用 XML 标记
- linux - 将 Postgresql 更新到较新版本会破坏旧代码
- maven - gradle maven默认上传哪些工件?
- android - 为什么viewModelScope.launch默认运行在主线程上
- deno - Node.js 中 process.argv 的 Deno 等价物是什么?
- mule - 如何在 Mule4 中为 accesstoken 生成缓存密钥?
- python - 密码加密 Python Flask