logo.gif (2519 bytes)

淮南工业学院学报
JOURNAL OF HUAINAN INSTITUTE OF TECHNOLOGY
2000 Vol.20 No.1 P.67-72

qklogo.gif (1030 bytes)


n阶幻方(n>4)的几种构造方法

殷志祥

摘要:提出并证明了:1.递归构造n阶幻方(n>4)的方法;2.已知m阶幻方(m>2)、n阶幻方(n>2),求mn阶幻方的公式;3.已知m阶幻方(m>2),构造2m阶幻方的方法。
关键词:幻方;构造方法;递归
中图分类号:O157  文献标识码:A
文章编号:1001-7038(2000)01-0067-06

Methods of constructing magic squares of order n (n4)

YIN Zhi-xiang
(Dept. of Math. and Phys.)

AbstractIn this paper, the author gives some methods of constructing magic squares: 1. a method of recursively constructing magic squares of order n (n4)2. a formula of obtaining magic squares of order mn when magic squares of order m (m2) and magic squares of order n(n2) are given; 3. a method of obtaining magic squares of order 2m when magic squares of order m (m2) are given.
Key words: magic square; methed of construetion; recurrence

1 引言

  有关幻方的记载最早出现在我国春秋时期(约公元前500年)的著作《论语》和《书经》中,“洛书”就是三阶幻方。从古至今有不少的学者对幻方做了进一步的研究,比如南宋的杨辉,现代的舒文中等。本文共提出了三种方法,有的适用所有n阶幻方(n>4),并且可在计算机上利用本文的构造方法和公式求出相应的n阶幻方(不管n为多大)。

2 方法和证明

  定义1:若一个元素为1~n2的n×n矩阵,其每行、每列以及两条对角线的和都相等,称这个矩阵为n阶幻方。若一个n×n矩阵的元素恰好是连续整数a,a+1,…,a+n2-1这个矩阵记为A(a,n),特别当a=1时,这个矩阵即为n阶幻方,记为A(n)。
  显然,若能构造出A(n),那么它的每个元素加上a-1,就得到A(a,n)。
  1可以看作是1阶幻方,2阶幻方是不存在的,3阶幻方A(3)和4阶幻方A(4)的例子为:

6701.gif (2010 字节)

  下面介绍三种方法:
2.1 递归构造幻方A(n)(n>4)
  首先取:
  Aij(n)=Ai-1,j-1(n-2)+2n-2 (2≤i≤n-1;2≤j≤n-1)
  也就是说,A(n)去掉第1行,第n行;第1例,第n列后得到A(2n-1,n-2)。容易知道,只要再使n×n矩阵的第2~n-1行(例)首末两数之和,两对角线两端两数之和都是n2+1,而第1行(列)、第n行(列)各数之和都为6802.gif (321 字节),便可得到A(n)。
  A(n)比A(2n-1,n-2)多出

1,2,…,2(n-1),     (1)

 这些数

n2,n2-1,…,(n-1)2+2   (2)

  为方便起见,称(1)中的数为小数,(2)中的数为大数。
  而a和n2+1-a定义为一组大小数对应数。
  令:a1j=n2+1-anj; aj1=n2+1-ajn; (2≤j≤n-1);a11=n2+1-ann; a1n=n2+1-an1
  以下固定取a11=n2,ann=1。
  在(1)、(2)中再找出2n-2个数填入A(n)的第一行和第一列,使第一行和第一列各数之和都为(1)/(2)n(n2+1)。由上可知这2n-2个数除了a1n和an1是互为对应数外,其它各组对应数都只取一个,所以若第一行和第一列各数之和都为6802.gif (321 字节),则第n行和第n列各数之和也都为6802.gif (321 字节),得到A(n)。
  分下列四种情况考虑:n=4k+3,n=4k+1,n=4k+4,n=4k+2(k为自然数)。
  ① n=4k+3
  取下列各数填入第一行和第一列(除a11外)
  3, 4k+2, 4k+3,… , 4(2k+1), n2-4k, n2-4k+1, …, n2-1        (3)
  因为3和n2-2是一组对应数,它们必须填在a1n和an1的位置。
  (3)中共有1+(4k+3)+4k=8k+4个数,它们的总和为

6801.gif (1961 字节)

  因此,只要把它们分成两个各有4k+2个数,且其和都是6803.gif (328 字节)的集合,那么第一行(列)各数总和为
  6804.gif (1178 字节)
  满足要求的两个集合容易找到。举例如下:
  (3)中共有4k个大数n2-4k,n2-4k+1,…,n2-1,它们可以分成k组数,每一组含有四个连续整数:
  {n2-4i, n2-4i+1, n2-4i+2, n2-4i+3,} 1≤i≤k
  只要把每一组的四个连续整数中的中间两数放入一个集合M1,首尾两数放入另一个集合M2即可。设M1中含有n2-2。
  (3)中的小数共有4k+4个,将3,4k+3, 8k+3, 8k+4放入M2(注意3和n2-2不能入同一个集合),4k+2,4k+4,4k+5,8k+2放入另一个集合M1;其它的4k-4个连续整数4k+6,…,8k+1也分成和数相等的各含2k-2个整数的两组,分别放入M2和M1两个集合,即可。
  现在(3)已分成两个各含4k+2个数,且其和都是6803.gif (328 字节)的集合。把M1和M2分别填入第一行,第一列。注意3和n2-2填在右上角(左下角)的位置,其它各数的位置可任意排列。
  ② n=4k+1
  第一行、第一列的数(除a11=n2外)取作
  5, 4k+3, 4k+5, 4k+6, … 8(k+1)
  n2-4k-3, n2-4k-1, n2-4k,… n2-1
  先把4k+2个大数分为两个各含2k+1个数且其和相等的两部分,分别填入M1,M2
  把n2-1,n2-3,n2-4k-3放入集合M1,n2-2,n2-4,n2-4k-1放入集合M2,而余下的4k-4个连续整数n2-4k,…,n2-6,n2-5可按①中处理连续数的方法分成两部分放入M1和M2中(设M1含有n2-4)。
  对于4k+6个小数,也将它们分成两部分:
  5, 8k+6, 8k+8放入集合M2,4k+3, 4k+9, 8k+7放入另一个集合M1。剩下的4k+5, 4k+6, 4k+7, 4k+8以及4(k-1)个连续整数4k+10, 4k+11,…, 8k+5也可分成两个各含2k个数且其和相等的部分分别放入M1和M2中。
  最后将M1(M2)的各数分别填入幻方的第一行(列),注意将5填在右上角或左下角位置,n2-4填在右上角或左下角位置。
  ③ n=4k+4 (k≥1)
  第一行a11=n2,a1n=4k+8,其它为
  2, 4k+4, 4k+7, n2-4k-8, n2-4k-9, n2-4这6个数。
  当k>1时,再加上:
  {4i, 4i+1, n2-4i-1, n2-4i-2}  2≤i≤k
  {4i-1, 4i, n2-4i, n2-4i-1}  k+3≤i≤2k+1      (4)
  这2k-2组数中任取k-1组,(除a11a1n外其它可随意填,下同)。
  第一行共有8+4(k-1)=4k+4=n个数,其总和为:
  6901.gif (1017 字节)
  第一列:a11=n2, an1=n2-4k-7,其它为:3,4,4k+5,4k+6,n2-5,n2-6这6个数,当k>1时,再加上(4)中剩下的k-1组。
  ④ n=4k+2 (k≥1)
  第一行:a11=n2, a1n=4k,其它的数为:
  4k-1, n2-4k, 4k+4, n2-4k-4
  当k>1时再加上
  {4i+2, 4i+3, n2-4i-3, n2-4i-4} 0≤i≤k-2
  {4i+1, 4i+2, n2-4i-2, n2-4i-3} k+2≤i≤2k     (5)
  这2(k-1)组数中任取(k-1)组。
  第一列:a11=n2, an1=n2-4k+1。其它的数为:
  4k-2, 4k+3, n2-4k-5, 4k+2, 当k>1时,再加上(5)中剩下的(k-1)组数。
  若n是大于8的偶数,n阶幻方的四条边(即第1,n行,第1、n列)还可通过另一种递推法求出。
  注意用上法求得6阶幻方中第一行为36, 32, 28, 3, 8, 4。
  第一列为36, 6, 7, 2, 27, 33, 各有3个大数,3个小数。
  8阶幻方的第一行为64, 2, 8, 11, 52, 51, 60, 12;
  第一列为64, 3, 4, 9, 10, 59, 58, 53
  各有4个大数,4个小数。
  假设已经构造出n-4阶幻方(n是大于8的偶数)A(n-4)。且它的第一行、第一列的大数个数等于小数个数(因此四条边上大数个数都相同)。
  现在需要构造n阶幻方A(n)的四条边(中心部分可利用n-2阶幻方造出,如上所述)。
  设A(n-4)的第一行元素为A11(n-4),A12(n-4),…,A1,n-4(n-4)
  令
  6902.gif (2685 字节)

  现取
  A11(n)=A*11(n-4)  A1n(n)=A*1,n-4(n-4)
  并把A*12(n-4),…,A*1,n-5(n-4)任意填入A(n)的第一行的剩下位置,还剩下4个空位,填入下列各数。
  n2-2n+6, n2-2n+7, 2n-4, 2n-7     (6)
  同样把A(n-4)的第一列填入A(n)的第一列(即大数加上8(n-2),小数不变,首末两数位置不变,其它可随意填),再填入下列4个数:
  n2-2n+3, n2-2n+10, 2n-3, 2n-8     (7)
  由于(6)、(7)中4个数的和相等,都是2n2+2,而第一行(列)其它各数的和等于:
  6903.gif (1240 字节)
  因而第一行(列)各数的总和为6802.gif (321 字节),这就证明所构造的矩阵确是一个幻方。
2.2 由m阶幻方和n阶幻方构造mn阶幻方
  已知m阶和n阶幻方,可利用它们构造mn阶幻方A(mn)。取
  Ami+j,mr+s(mn)=m2(Ai+1,r+1(n)-1)+Aj,s(m)  0≤i, r≤n-1, 1≤j, s≤m
  当i,r取遍0到n-1各数,j,s取遍1到m各数,则(mi+j,mr+s)恰好取遍A(mn)的所有下标。又因Ai+1,r+1(n)取遍1到n2各数,Aj,s(m)取遍1到m2各数。可知,所构造的矩阵元素恰取遍1到m2n2各数各一次。
  A(mn)的第mi+j行(0≤i≤n-1,1≤j≤m)总和为:

7102.gif (3527 字节)

  同理可知它的每列、和两条对角线各元素之和都等于7103.gif (459 字节)
  由这个构造法可知,用一个n阶幻方和n2个不同的m阶幻方可构造mn阶幻方。

3 偶数阶幻方构造法

  为了构造2m阶幻方A(2m),首先构造一个2m阶矩阵M(2m),它的元素都是1,2,3,4,此矩阵可以分成m2块。

7104.gif (1409 字节)

  其中Bij(1≤i≤m,1≤j≤m)是2×2矩阵,并且四个元素为1,2,3,4四数,且每行两元素之和为5。对矩阵M(2m),还要求它的每行、每列及两条对角线各数之和都是5m。
  我们仍用递推法来构造M(2m),M(6)和M(8)可以直接构造出来。这里不多说。下面叙述由M(2(m-2))构造M(2m)的方法。
  M(2m)的中心2(m-2)×2(m-2)矩阵就是M(2(m-2)),即:
  Bi,j(2m,2m)=Bi-1,j-1(2(m-2),2(m-2)) 2≤i,j≤m-1
  下面构造M(2m)的四边,即B1j(1≤j≤m),Bi1(1≤j≤m),Bmj(1≤j≤m),Bim(1≤i≤m)。

7105.gif (1521 字节)

  任取M(2(m-2))的两行第i行(i=(i1,i2,…,im-1),1≤i≤m-2)和第j行(7106.gif (94 字节)=(j1,j2,,jm-2),1≤j≤m-2)填入M(2m)的第一行和第二行余下的位置。
  再把这个第i行经过变换后(i1与i2交换,i3与i4交换,以此类推)填入M(2m)的第m-1行,第j行经过同样变换后(j1与j2交换,j3与j4交换,以此类推)填入第m行。
  B1j(1≤j≤m), Bmj(1≤j≤m)构造完毕。
  用同等方法,任取M(2(m-2))的两列第i列(1≤i≤m-2)和第j列(1≤j≤m-2)填入M(2m)的第一列和第二行列下的位置;再把这个第i列和第j列经过变换后(第1个数与第2个数交换,第3个数与第4个数交换,依次类推)填入M(2m)的第m-1列和第m列。
  Bi1(1≤j≤m), Bim(1≤j≤m)也构造完毕。
  容易证明所得矩阵M(2m)满足要求。
  取一个已知m阶幻方A(m),作矩阵。

7201.gif (777 字节)

  其中Cij(1≤j≤m,1≤j≤m)是2×2矩阵:

7202.gif (1048 字节)

  令A(2m)=M(2m)+C,容易看出A(2m)就是一个2m阶幻方。

淮南工业学院表扬基金资助项目.

殷志祥(1966-),男,安徽全椒人,硕士,副教授,主要从事数学教学工作及组合数学方面的科研工作.

殷志祥(淮南工业学院数理系,安徽 淮南 232001)

收稿日期:1999-10-08