摘要

2013年1月hujunhua提问 :

Z_6^2上的最优幻方

在编排6阶全对称幻方时,排成蜂窝状网格(又称为等距网格)比排成方格可体现更高的对称性,如图1所示。图中坐标相同的格为同一格,表现了所谓全对称幻方是嵌入到一个三维环面(轮胎面)的。在平面上表现时,可以按这个局部呈现的相邻关系扩展到整个平面上。扩展后,将视野取为一个如图2那样的正六角形区域时,呈现了6阶幻方的旋转对称性。在等距格网上,原来方格网上的一条对角线(x=y)看起来成为一条主轴。

等距网格的对角线定义为相距次近的两格的连线,如图1中的黄色格列(在图2的正六角形视野中,呈现为正六角形的长对角线方向)。按此定义,6阶幻方有3条主轴方向和3条对角线方向,我们要求在其中的每一个方向上直线排列的6格数之和都等于幻方和数。这就比通常所谓的“全对称幻方”约束更多,对称性更高。

蜂窝网 6阶模
图1 菱形视野 图2 六角形视野

用代数学的语言来描述,6阶幻方就是Z_6^2→{1, 2, 3, …, 36}的一个映射f, f 满足某些函数方程,即幻方编排者所称的幻方律。比如关于行的幻方律即
f(x,y)+f(x,y+1)+f(x,y+2)+…+f(x,y+5)=6A(A是36个填入数的平均值)
由于 f 的定义域为模Z_6^2, 所以这类幻方宜可称之为模上的幻方,简称模幻方。

除了定义时给出的2条幻方律(其实是6条,但是可用主轴线和对角线分别概括),6阶模幻方还有一些导出的幻方律,展现了其6阶旋转对称性。

导出律1:对角线上的相间三格之和等于3A。如图3所示。变换视野,一条对角线的相间3格布成一个正三角形。
导出律2:图4显示两条上述半对角线布成了一个正六角形,六角之和等于6A。
导出律3:见图5,呈三叶草形的4个黄色格(其中格33带红色纹线)之和等于4A。格33也可以在带纹线的青色格的位置,在此视野中这四格呈菱形。

幻方律1 幻方律6 幻方律2
图3 导出律1:对角线上的相间三格之和等于3A 图4 导出律2:正六角形的六角之和等于6A 图5 导出律3:边长为4格的菱形四角之和等于4A

还有更多的表现6阶旋转对称性的导出律,后文给出。这些导出律并非观察具体的数字而来,而是依据定义所给的约束方程消元而得。
对于这样的6阶幻方,用{1, 2, 3, …, 36}是填不成功的。因为,图5中的4格减去图3中3格=4A-3A=A,所以A必须是整数。若用{1, 2, 3, …, 36},总和Σ=36×37/2,A=Σ/36=37/2 非整数。
为了编出6阶模幻方,f 只能取其它的值域。下图是用-42至+40间的总和为 0 的36个数填制的一个6阶模幻方。
 一个数组松散的6阶模幻方
这个幻方的各主轴线和对角线都是满足幻和恒定之约束的,但是相对于连续的{1, 2, 3, …, 36}而言,其中数组洞断之处太多了。为了保持幻方的数字之美,值域应该尽可能接近自然数前段{1, 2, 3, …, 36},洞断最少。我们的目标就是找到数组最优的6阶模幻方。
由于36×37/2≡18(mod 36), 所以要使A为整数,最接近{1, 2, 3, …, 36}的数组是从中去掉18,添上0,即{0~17,19~36}。这种只有一个洞是可能达到的最优数组了。

更多的密集性导出律

为了编排6阶模幻方,hujunhua接着给出了更多的密集性导出律 :
导出律4:如图6所示的边平行于主轴的最小正六角形(黄色格),六角之和加上中心格的2倍等于8A
导出律5:如图7所示的边平行于对角线的最小正六角形(黄色格),六角之和减去中心格等于5A

幻方律3 幻方律4
图6 导出律4 图7 导出律5

导出律6:图8所示正六角形区域的13个黄格之和等于13A. 由图6与图7叠加即得。
导出律7:图9所示正六边形区域的19个黄格之和等于19A. 由图8与图4叠加即得。

幻方律5 幻方律7
图8 导出律6 图9 导出律7

这几个导出律格子比较密集,比原先的线状约束更有利于得出少量几格的等和关系。

参数解

为了编程简明,hujunhua将上述单孔数组平移为正负对称数组{±1, ±2, ±3, …, ±18},使得总和与幻和都是 0, 并称这样的幻方为零和幻方。然后利用导出律1、导出律3、导出律4 图解填出了零和6阶模幻方的一个参数解 :

参数解
图10 参数解

这个参数解是12维的,表明6阶零和模幻方的定义中给出的36个约束方程的秩为24. 图中s1=-(a1+b1+…+f1)/2, s2=-(a2+b2+…+f2)/2, s3=-(s1+s2), a3=-(a1+a2),….
hujunhua用这个参数解编程进行搜索,发现52小时才运行了大概5%的进度,没有找到任何合法的结果,终止了代码的运行。

单孔6阶模幻方不存在

mathe接手解决这个问题,通过直接解线性方程组,也给出了一个12维的代数解,然后用C编写代码穷举,几经调试,消除bug,终于穷举证明了只有一个空缺的6阶模幻方是不存在的

双孔6阶模幻方不存在

连续的{1,2,3,…,36}奇偶不合,单孔的已穷尽不存在,次优就是双孔的了。双孔的数组,就是要在38个连续整数中,比如{0,1,2,…,37}中挖去两个数。∑{0~37}≡19(mod36), 所以挖去的两个洞之和须为19或者55. 易得有{1,18}, {2,17},…, {9,10}以及{19,36}, {20,35}, …, {27,28}共18种双洞组合。比如洞组{1,18}相应的数组即{0,2,3,…,17,19,…,37}.
如果把这个数组用37一减再逆序,立马得到数组{0,1,2,…,18,20,…,34,35,37},其洞组为{19,36}. 18个双孔洞组都是这样两两成对的,故实际上只有9种,取后9种就代表了。

mathe的程序进一步验证 了也不存在双孔6阶模幻方。

最小6阶模幻方—三孔数组

3个洞的数组,即要从39个连续整数,比如{0~38}中挖去3个数。∑{0~38}≡21(mod36), 所以挖去的3个洞之和须为21、57或者93.
与双洞相仿,和为21与和93的组是对称同构的,取其一即可,共是27种3洞组合:

In[1]:= Select[IntegerPartitions[21, {3}], DuplicateFreeQ]
Out[1]= {{18, 2, 1}, {17, 3, 1}, {16, 4, 1}, {16, 3, 2}, {15, 5, 1}, {15, 4, 2}, {14, 6, 1}, {14, 5, 2}, {14, 4, 3}, {13, 7, 1}, {13, 6, 2}, {13, 5, 3}, {12, 8, 1}, {12, 7, 2}, {12, 6, 3}, {12, 5, 4}, {11, 9, 1}, {11, 8, 2}, {11, 7, 3}, {11, 6, 4}, {10, 9, 2}, {10, 8, 3}, {10, 7, 4}, {10, 6, 5}, {9, 8, 4}, {9, 7, 5}, {8, 7, 6}}

和为57的共计162种洞组,

In[2]:= Select[IntegerPartitions[57, {3}, Range[37]], DuplicateFreeQ]
Out[2]= {{37, 19, 1}, {37, 18, 2}, {37, 17, 3}, {37, 16, 4}, {37, 15,   5}, {37, 14, 6}, {37, 13, 7}, {37, 12, 8}, {37, 11, 9}, {36, 20, 1}, {36, 19, 2}, {36, 18, 3}, {36, 17, 4}, {36, 16, 5}, {36, 15, 6}, {36, 14, 7}, {36, 13, 8}, {36, 12, 9}, {36, 11, 10}, {35, 21, 1}, {35, 20, 2}, {35, 19, 3}, {35, 18, 4}, {35, 17, 5}, {35, 16, 6}, {35, 15, 7}, {35, 14, 8}, {35, 13, 9}, {35, 12, 10}, {34, 22, 1}, {34, 21, 2}, {34, 20, 3}, {34, 19, 4}, {34, 18, 5}, {34, 17, 6}, {34, 16, 7}, {34, 15, 8}, {34, 14, 9}, {34, 13, 10}, {34, 12, 11}, {33, 23, 1}, {33, 22, 2}, {33, 21, 3}, {33, 20, 4}, {33, 19, 5}, {33, 18, 6}, {33, 17, 7}, {33, 16, 8}, {33, 15, 9}, {33, 14,10}, {33, 13, 11}, {32, 24, 1}, {32, 23, 2}, {32, 22, 3}, {32, 21,4}, {32, 20, 5}, {32, 19, 6}, {32, 18, 7}, {32, 17, 8}, {32, 16, 9}, {32, 15, 10}, {32, 14, 11}, {32, 13, 12}, {31, 25, 1}, {31, 24, 2}, {31, 23, 3}, {31, 22, 4}, {31, 21, 5}, {31, 20, 6}, {31, 19, 7}, {31, 18, 8}, {31, 17, 9}, {31, 16, 10}, {31, 15, 11}, {31, 14,12}, {30, 26, 1}, {30, 25, 2}, {30, 24, 3}, {30, 23, 4}, {30, 22, 5}, {30, 21, 6}, {30, 20, 7}, {30, 19, 8}, {30, 18, 9}, {30, 17, 10}, {30, 16, 11}, {30, 15, 12}, {30, 14, 13}, {29, 27, 1}, {29, 26,2}, {29, 25, 3}, {29, 24, 4}, {29, 23, 5}, {29, 22, 6}, {29, 21, 7}, {29, 20, 8}, {29, 19, 9}, {29, 18, 10}, {29, 17, 11}, {29, 16, 12}, {29, 15, 13}, {28, 27, 2}, {28, 26, 3}, {28, 25, 4}, {28, 24, 5}, {28, 23, 6}, {28, 22, 7}, {28, 21, 8}, {28, 20, 9}, {28, 19, 10}, {28, 18, 11}, {28, 17, 12}, {28, 16, 13}, {28, 15, 14}, {27, 26, 4}, {27, 25, 5}, {27, 24, 6}, {27, 23, 7}, {27, 22, 8}, {27, 21, 9}, {27, 20, 10}, {27, 19, 11}, {27, 18, 12}, {27, 17, 13}, {27, 16, 14}, {26, 25, 6}, {26, 24, 7}, {26, 23, 8}, {26, 22, 9}, {26, 21, 10}, {26, 20, 11}, {26, 19, 12}, {26, 18, 13}, {26, 17, 14}, {26, 16, 15}, {25, 24, 8}, {25, 23, 9}, {25, 22, 10}, {25, 21, 11}, {25, 20, 12}, {25, 19, 13}, {25, 18, 14}, {25, 17, 15}, {24, 23, 10}, {24, 22, 11}, {24, 21, 12}, {24, 20, 13}, {24, 19,14}, {24, 18, 15}, {24, 17, 16}, {23, 22, 12}, {23, 21, 13}, {23,   20, 14}, {23, 19, 15}, {23, 18, 16}, {22, 21, 14}, {22, 20, 15}, {22, 19, 16}, {22, 18, 17}, {21, 20, 16}, {21, 19, 17}, {20, 19, 18}}

其中含中位数19的计18种:{37,19,1}, (36,19,2}, …, {20,19,18};是自对称的。
不含19的剩144种,由于成对对称同构,折半为72种。
所以合计90种三孔洞组,其中自对称的18种。

mathe的代码先是找到了两个3孔6阶模幻方 ,他用的数组是1~39:

第一列 第二列 第三列 第四列 第五列 第六列
28 7 38 8 29 10
17 25 13 22 19 24
21 18 27 15 23 16
11 32 2 33 12 30
4 35 9 37 1 34
39 3 31 5 36 6
第一列 第二列 第三列 第四列 第五列 第六列
4 3 38 22 23 30
11 35 31 8 19 16
21 32 9 5 29 24
17 18 2 37 36 10
28 25 27 33 1 6
39 7 13 15 12 34

hujunhua将它们的数组平移至{-19~+19}的正负对称区间,转化为图案后发现它们其实是等价的.
E90C89CC

mathe再接再厉,穷举出了所有可能的三孔6阶模幻方,不去重共计6840个。
hujunhua对结果进行了去重处理,合计459个本原解。其中洞组对称的452解,非对称的7解。上述90个洞组中,实际只有15个洞组有解。在处理过程中,hujunhua将数组都平移为零和数组,数组范围为-19~19(448解)或者-20~18(4解)。
数组范围 -19~19,12洞组有解,其中对称洞组9个。见下面一览表。

洞组 取反平移对称 取反中心对称 取反对称对 本原解数
{-2, 0, 2} 15 0 0 15
{-4, 0, 4} 10 0 5对 15
{-6, 0, 6} 37 6 19对 62
{-8, 0, 8} 7 0 19对 26
{-10, 0, 10} 14 0 25对 39
{-12, 0, 12} 49 1 12对 62
{-14, 0, 14} 20 2 2对 24
{-16, 0, 16} 29 0 18对 47
{-18, 0, 18} 87 3 36对 126
合计 268 12 136对 452
{-10, -8, 18} 非对称数组 非对称数组 3对 3
{-10, -6, 16} 非对称数组 非对称数组 1对 1
{-14, -4, 18} 非对称数组 非对称数组 3对 3

数组范围 -20~18,3个洞组有解.见下表。

洞组 本原解数
{-19, -13, -7} 非对称数组 2
{-17, -15, -7} 非对称数组 1
{-15, -13, -11} 非对称数组 1

美图秀

hujunhua手工处理了48个{0~38}的去重,结果只有4个本原解, 每个本原解重复12次(含自身)。
把数组化成了{-20~18}, 使总和为0,相应的{洞组, 本原解数}如下:
{{-19, -13, -7}, 2}
{{-17, -15, -7}, 1}
{{-15, -13, -11}, 1}
六阶模幻方-15-13-11
六阶模幻方-17-15-7
六阶模幻方-19-13-7
六阶模幻方-19-13-7a

然后他设计了一个画图的mathematica代码

RulesArray =Solve[x + y + z == 15 && 0 <= x <= 10 && 0 <= y <= 10 && 0 <= z <= 10, {x, y, z}, Integers];
mf[n_] := m13906[[n, Mod[5 - z, 6, 1], Mod[y + 1, 6, 1]]]
Graphics3D[{Sphere[{x, y, z}], Text[Style[Abs@mf[100], Medium, Bold, If[mf[100] > 0, Black, Red]], {x, y, z}]} /. RulesArray, ViewPoint -> {100, 100, 100}, Boxed -> False]

可以给出类似如下的图
m13906100
程序中的坐标{5-z,y+1}的选择是为了使画出来的图的左上角幻方与 mathe 的解的排列顺序一致。
坐标使用±{-x, y}, ±{-y, x}, ±{-y, z}, ±{-z, y}, ±{-z, x}或±{-x, z}都是可以的,无非是旋转和镜像的关系。
或者在此基础上再加一个常数也行(比如我们用的+5和+1),这是平移。
画法原理:就是在平面 x+y+z=15 的下图所示整点上画单位球,利用球的相贯线自动形成蜂巢状。
XYZe5

于是他继续分析余下数据,并给出如下图解:
{-10, -8, 18} 共有3个本原解。
m13910601
m13910603
m13910613

{-10, -6, 16}共有1个本原解。
m13910801

{-14, -4, 18}共有3个本原解。
m13914401
m13914407
m13914413

{-2, 0, 2}
15个解
它们的相反数对全都是平移对称的。
m1390201_15

{-4, 0, 4}16个本原解
m1390401_20
以上20图,3、6、7、8、10、11、12、15、16、17、19、20 这 12 个的相反数对是平移对称的,因此是取反自对称的。
1 与 9,2 与 18, 4 与 13, 5 与14 是取反重复的。

中心对称12图

mathe 给的3孔数组幻方中,第1个就是中心对称幻方,所以最初以为会有很多中心对称幻方的。
没想到最终只有12个。既然不多,就以全列出来了。
中心对称12

其它对称洞组的,由于解图较多,就不一一制图了。
6阶模幻方的图解,为模幻方的研究开辟了道理。