五阶幻方
介绍
五阶幻方是 5×5 的奇数阶幻方,核心是由 1-25 这 25 个连续自然数组成的方阵,其每行、每列及两条主对角线的数字之和(幻和)均相等,固定为 65。
核心特征
- 幻和固定:根据公式 “幻和 = n (n²+1)/2”(n 为阶数),5 阶幻和 = 5×(25+1)/2=65。
- 数字范围:必包含 1 到 25 的所有整数,无重复、无遗漏。
- 对称性:部分构造方法(如斜步法)生成的幻方,中心位置固定为 13(1-25 的中间数),且存在中心对称的数字对(和为 26)。
经典构造方法
最常用的是Siamese 方法(斜步法) ,步骤简单且通用所有奇数阶幻方:
- 初始位置:第一行正中间(坐标 (0,2),以 0 为起始索引)。
- 填充规则:每次向右上方移动一格填充下一个数字。
- 边界处理:超出上边界则从最下一行进入,超出右边界则从最左一列进入。
- 冲突处理:若目标位置已有数字,直接移到当前位置的正下方继续填充。
代码
def generate_5x5_magic_square():
# 初始化5x5矩阵
magic_square = [[0 for _ in range(5)] for _ in range(5)]
# 从1开始填充数字
num = 1
# 初始位置:第一行中间
i, j = 0, 2
while num <= 25:
magic_square[i][j] = num
num += 1
# 计算下一个位置(右上方向)
next_i = (i - 1) % 5
next_j = (j + 1) % 5
# 如果下一个位置已有数字,则移到当前位置的正下方
if magic_square[next_i][next_j] != 0:
i = (i + 1) % 5
else:
i, j = next_i, next_j
return magic_square
def print_magic_square(square):
"""打印幻方,格式化输出"""
for row in square:
print(" ".join(f"{num:2d}" for num in row))
# 验证幻和
magic_sum = sum(square[0])
print(f"\n幻和为: {magic_sum}")
# 生成并打印5阶幻方
magic_square = generate_5x5_magic_square()
print("5阶幻方:")
print_magic_square(magic_square)
结果
第一行:17 + 24 + 1 + 8 + 15 = 65
主对角线:17 + 5 + 13 + 21 + 9 = 65
第一列:17 + 23 + 4 + 10 + 11 = 65