标题：幻方
概述
在一个由若干个排列整齐的数组成的正方形中，图中任意一横行、一纵行及对角线的几个数之和都相等，具有这种性质的图表，称为“幻  洛书，一个3阶幻方方”。中国古代称为“河图”、“洛书”，又叫“纵横图”。
九宫洛书蕴含奇门遁甲的布阵之道。九宫之数源于易经中，《易经》。幻方也称纵横图、魔方、魔阵，它是科学的结晶与吉祥的象征，发源于中国古代的洛书——九宫图。公元前一世纪，西汉宣帝时的博士戴德在他的政治礼仪著作《大戴礼·明堂篇》中就有“二、九、四、七、五、三、六、一、八”的洛书九宫数记载。洛书被世界公认为组合数学的鼻祖，它是中华民族对人类的伟大贡献之一。同时，洛书以其高度抽象的内涵，对中国古代政治伦理、数学、天文气象、哲学、医学、宗教等等都产生了重要影响。在远古传说中，于治国安邦上也具有积极的寓意！包括洛书在内的幻方自古以来在亚、欧、美洲不少国家都被作为驱邪避凶的吉祥物，这种古代地域广泛的图腾应该说是极其少见的。1975年上海人民出版社出版的自然辩证法丛书《自然科学大事年表》，对于幻方作了特别的述说：“公元前一世纪，《大戴礼》记载，中国古代有象征吉祥的河图洛书纵横图，即为九宫算，被认为是现代‘组合数学’最古老的发现。”还附了全书唯一的插图！
2500年前，孔子在他研究《易经》的著作《系词上传》中记载了：“河出图，洛出书，圣人则之。”最早将数字与洛书相连的记载是2300年前的《庄子·天运》，它认为：“天有六极五常，帝王顺之则治，逆之则凶。九洛之事，治成德备，监照下土，天下戴之，此谓上皇。”明代数学家程大位在《算法统宗》中也曾发出“数何肇？其肇自图、书乎？伏羲得之以画卦，大禹得之以序畴，列圣得之以开物”的感叹，大意是说，数起源于远古时代黄河出现的河图与洛水出现的洛书，伏羲依靠河图画出八卦，大禹按照洛书划分九州，并制定治理天下的九类大法，圣人们根据它们演绎出各种治国安邦的良策，对人类社会与自然界的认识也得到步步深化。大禹从洛书中数的相互制约，均衡统一得到启发而制定国家的法律体系，使得天下一统，归于大治，这是借鉴思维的开端。这种活化思维的方式已成为科学灵感的来源之一。从洛书发端的幻方在数千年后的今天更加生机盎然，被称为具有永恒魅力的数学问题。十三世纪，中国南宋数学家杨辉在世界上首先开展了对幻方的系统研究，欧洲十四世纪也开始了这方面的工作。著名数学家费尔玛、欧拉都进行过幻方研究，如今，幻方仍然是组合数学的研究课题之一，经过一代代数学家与数学爱好者的共同努力，幻方与它的变体所蕴含的各种神奇的科学性质正逐步得到揭示。目前，它已在组合分析、实验设计、图论、数论、群、对策论、纺织、工艺美术、程序设计、人工智能等领域得到广泛应用。1977年，4阶幻方还作为人类的特殊语言被美国旅行者1号、2号飞船携入太空，向广袤的宇宙中可能存在的外星人传达人类的文明信息与美好祝愿！
幻方种类
完全幻方完全幻方指一个幻方行列、对角线，及“折断”了的对角线各数之和相等。乘幻方乘幻方指一个幻方行列、对角线各数乘积相等。n阶幻方与高阶幻方n阶幻方是由前n^2（n的2次方）个自然数组成的一个n阶方阵，其各行、各列及两条对角线所含的n个数的和相等。例子：（三阶幻方，幻和为15，）
4
9
2
3
5
7
8
1
6
三阶幻方中间必填5
高次幻方是指，当组成幻方各数替换为其2，3,...,k次幂时，仍满足幻方条件者，称此幻方为k次幻方。反幻方反幻方的定义：在一个由若干个排列整齐的数组成的正方形中，图中任意一横行、一纵行及对角线的几个数之和不相等，具有这种性质的图表，称为“反幻方”。
反幻方与正幻方最大的不同点是幻和不同，正幻方所有幻和都相同，而反幻方所有幻和都不同。所谓幻和就是幻方的任意行、列及对角线几个数之和。如下图3阶反幻方的比较。
  反幻方图中边框外围的数字之和就是幻和。红色为偶数，黑色为奇数。
可以说反幻方是一种特殊的幻方。反幻方的幻和可以全部不同，也可以部分相同。如下图多种3阶反幻方。  多种反幻方
历史
幻方又称为魔方，方阵或厅平方，它最早起源于中国。宋代数学家杨辉称之为纵横图。
幻方的幻在于无论取哪一条路线，最后得到的和或积都是完全相同的。
大约两千多年前西汉时代，流传夏禹治水时，黄河中跃出一匹神马，马背上驮着一幅图，人称「河图」；又洛水河中浮出一只神龟，龟背上有一张象征吉祥的图案称为「洛书」.他们发现，这个图案每一列，每一行及对角线，加起来的数字和都是一样的，这就是我们现在所称的幻方.也有人认为"洛书"是外星人遗物；而"河图"则是描述了宇宙生物（包括外星人）的基因排序规则，幻方是外星人向地球人的自我介绍.另外前几年在上海浦东陆家嘴地区挖出了一块元朝时代伊斯兰教信徒所挂的玉挂，玉挂的正面写着：「万物非主，惟有真宰，默罕默德，为其使者」，而玉挂的另一面就是一个四阶幻方.
关于幻方的起源，中国有“河图”和“洛书”之说。相传在远古时期，伏羲氏取得天下，把国家治理得井井有条，感动了上天，于是黄河中跃出一匹龙马，背上驮着一张图，作为礼物献给他，这就是“河图”，也是最早的幻方。伏羲氏凭借着“河图”而演绎出了八卦，后来大禹治洪水时，洛水中浮出一只大乌龟，它的背上有图有字，人们称之为“洛书”。“洛书”所画的图中共有黑、白圆圈45个。把这些连在一起的小圆和数目表示出来，得到九个。这九个数就可以组成一个纵横图，人们把由九个数3行3列的幻方称为3阶幻方，除此之外，还有4阶、5阶... 
后来，人们经过研究，得出计算任意阶数幻方的各行、各列、各条对角线上所有数的和的公式为：
S=n(n ^2+1) /2
其中n为幻方的阶数，所求的数为S. 
幻方最早记载于中国公元前500年的春秋时期《大戴礼》中，这说明中国人民早在2500年前就已经知道了幻方的排列规律。而在国外，公元130年，希腊人塞翁才第一次提起幻方。
中国不仅拥有幻方的发明权，而且是对幻方进行深入研究的国家。公元13世纪的数学家杨辉已经编制出3－10阶幻方，记载在他1275年写的《续古摘厅算法》一书中。在欧洲，直到1514年，德国著名画家丢勒才绘制出了完整的四阶幻方。
而在国外，十二世纪的阿拉伯文献也有六阶幻方的记载，中国的考古学家们曾经在西安发现了阿拉伯文献上的五块六阶幻方，除了这些以外，历史上最早的四阶幻方是在印度发现的，那是一个完全幻方（后面会提到），而且比中国的杨辉还要早了两百多年，印度人认为那是天神的手笔.1956年西安出土一铁片板上所刻的六阶幻方(古阿拉伯数字)十三世纪，东罗马帝国才对幻方产生兴趣，但却没有什么成果.
直到十五世纪，住在君士坦丁堡的魔索普拉才把中国的纵横图传给了欧洲人，欧洲人认为幻方可以镇压妖魔，所以把它作为护身符，也把它叫作「Magic Square」.
欧洲最早的幻方是在德国一位名画家Albrecht Dure的画里的，
上面有一个四阶幻方，而这个幻方的下面两个数字正好是这幅画的制作年代(1514年）.这是欧洲最古老的幻方.
幻方世界纪录
目前中国取得不少幻方世界纪录：幻方专家李文第一位构造成功10阶标准幻立方，第一位构造出最低阶729阶五次幻方,和多项平方幻方世界纪录，幻方专家苏茂挺第一位构成功32阶完美平方幻方.等.
提醒大家注意，任意阶幻方构造法，任意维幻方构造法，任意次幻方构造法，都早已找到.
不存在最大阶幻方的世界纪录之类.
对于各种媒体报导的幻方世界之最，很多是不实报导.不存在未解最大阶数幻方.
种类
现在的幻方种类很多，如：
一般幻方,对称幻方,同心幻方,完美幻方
平面幻方（二维），幻立方（三维），多维幻方，
平方幻方，立方幻方，高次幻方，高次多维幻方.
魔鬼幻方,马步幻方,多重幻方,六角幻方，双料幻方，幻环，幻圆等等
特殊的幻方有反幻方，完美反幻方，同心幻方。
幻方欣赏
中国幻方网站：[1]
中国幻方博客：
法国高次幻方网站：[2]
日本多维幻方网站：[3]
富兰克林的幻方：[4]
九阶平方幻方： [5]
十二阶完美幻方（每个2×2子矩阵和为286):  12阶幻方
编制幻方的程序
目前利用计算机编程序，可求解出任意阶幻方.（但数字位数受电脑限制，实际上只能是有限范围内的任意阶）
对于某些平方幻方，高次幻方，利用计算机辅助计算，也可快速求得.
一次幻方，一次幻立方，一次多维幻方，甚至可用简单公式全部求得.
某些类型的平方幻方，甚至高次高维幻方，也可用公式求得.
在幻方公式求解方法，中国处于世界领先水平.中国李文的高维高次幻方公式，是幻方理论中的精品.吴硕辛的高次幻方理论，也可用公式求解.
构造
在《射雕英雄传》中郭黄二人被裘千仞追到黑龙潭，躲进瑛姑的小屋。瑛姑出了一道题：数字1~9填到三行三列的表格中，要求每行、每列、及两条对角线上的和都相等。这道题难倒了瑛姑十几年，被黄蓉一下子就答出来了。
4 9 2 
3 5 7 
8 1 6
这就是一个最简单的3阶平面幻方。因为幻方的智力性和趣味性，很游戏和玩具都与幻方有关，如捉放曹、我们平时玩的六面体，也成为学习编程时的常见问题。
幻方又称纵横图、九宫图，最早记录于中国古代的洛书。据说夏禹治水时，河南洛阳附近的大河里浮出了一只乌龟，背上有一个很奇怪的图形，古人认为是一种祥瑞，预示着洪水将被夏禹王彻底制服。后人称之为"洛书"或"河图"，又叫河洛图。
南宋数学家杨辉，在他著的《续古摘奇算法》里介绍了这种方法：只要将九个自然数按照从小到大的递增次序斜排，然后把上、下两数对调，左、右两数也对调；最后再把中部四数各向外面挺出，幻方就出现了。（摘自《趣味数学辞典》）
最简单的幻方就是平面幻方，还有立体幻方、高次幻方等。对于立体幻方、高次幻方目前世界上很多数学家仍在研究，现在只讨论平面幻方。
对平面幻方的构造，分为三种情况：N为奇数、N为4的倍数、N为其它偶数(4n+2的形式）
⑴ N 为奇数时，最简单：
⑴ 将1放在第一行中间一列；
⑵ 从2开始直到n×n止各数依次按下列规则存放：
按 45°方向行走，如向右上
每一个数存放的行比前一个数的行数减1，列数加1
⑶ 如果行列范围超出矩阵范围，则回绕。
例如1在第1行，则2应放在最下一行，列数同样加1;
⑷ 如果按上面规则确定的位置上已有数，或上一个数是第1行第n列时，
则把下一个数放在上一个数的下面。
⑵ N为4的倍数时
采用对称元素交换法。
首先把数1到n×n按从上至下，从左到右顺序填入矩阵
然后将方阵的所有4×4子方阵中的两对角线上位置的数关于方阵中心作对
称交换，即a(i,j）与a(n+1-i,n+1-j）交换，所有其它位置上的数不变。
（或者将对角线不变，其它位置对称交换也可）
⑶ N 为其它偶数时
当n为非4倍数的偶数（即4n+2形）时：首先把大方阵分解为4个奇数(2m+1阶）子方阵。
按上述奇数阶幻方给分解的4个子方阵对应赋值
上左子阵最小（i），下右子阵次小（i+v），下左子阵最大（i+3v），上右子阵次大（i+2v)
即4个子方阵对应元素相差v，其中v=n*n/4
四个子矩阵由小到大排列方式为 ① ③
④ ②
然后作相应的元素交换：a(i,j）与a(i+u,j）在同一列做对应交换（j<t或j>n-t+2),
a(t-1,0）与a(t+u-1,0）；a(t-1,t-1)与a(t+u-1,t-1)两对元素交换
其中u=n/2，t=(n+2)/4 上述交换使每行每列与两对角线上元素之和相等。
C语言实现
#include"stdio.h"
#include"math.h"
int a[256][256];
int sum;
int check();
void ins(int n);
main()
{
int i,j,n,k,t,p,x;
scanf("%d",&n);
sum=(n*n+1)*n/2;
if(n%2==1)//奇数幻方
{
ins(n);
k=n;
}
if(n%4==2)//单偶数幻方
{
k=n/2;
ins(k);
for(i=0;i<k;i++)
for(j=0;j<k;j++)
{
a[j+k]=a[j]+2*k*k;
a[i+k][j]=a[j]+3*k*k;
a[i+k][j+k]=a[j]+k*k;
}
t=(n-2)/4;
for(i=0;i<k;i++)
for(j=0;j<k;j++)
{
if((j<t)&&(i<t))
{
p=a[j];a[j]=a[i+k][j];a[i+k][j]=p;
}
if((j<t)&&(i>k-t-1))
{
p=a[j];a[j]=a[i+k][j];a[i+k][j]=p;
}
if((i>=t&&i<=k-t-1)&&(j>=t&&j<t*2))
{
p=a[j];a[j]=a[i+k][j];a[i+k][j]=p;
}
if(j>1&&j<=t)
{
p=a[j+k];a[j+k]=a[i+k][j+k];a[i+k][j+k]=p;
}
}
}
if(n%4==0)//双偶数幻方
{
x=1;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
a[j]=x++;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(i%4==0&&abs(i-j)%4==0)
for(k=0;k<4;k++)
a[i+k][j+k]=n*n-a[i+k][j+k]+1;
else if(i%4==3&&(i+j)%4==3)
for(k=0;k<4;k++)
a[i-k][j+k]=n*n-a[i-k][j+k]+1;
}
}
if(check(n)==1)
{
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%5d",a[j]);
printf("\n");
}
return ;
}
}
int check(int n)//检验是否是幻方
{
int i,j,sum1=0,sum2;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
sum1+=a[j];
if(sum1!=sum) return 0;
sum1=0;
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
sum1+=a[j];
if(sum1!=sum) return 0;
sum1=0;
}
for(sum1=0,sum2=0,i=0,j=0;i<n;i++,j++)
{
sum1+=a[j];
sum2+=a[n-j-1];
}
if(sum1!=sum) return 0;
if(sum2!=sum) return 0;
else return 1;
}
void ins(int n)//单偶数幻方的输入
{ int x,y,m;
x=0;y=n/2;
for(m=1;m<=n*n;m++)
{
a[x][y]=m;
if (m%n!=0)
{
x--;y++;
if(x<0) x=x+n;
if(y==n) y=n-y;
}
else
{
x++;
if(x==n) x=x-n;
}
}
}
奇阶幻方 
当n为奇数时，我们称幻方为奇阶幻方。可以用Merzirac法与loubere法实现，根据我的研究，发现用国际象棋之马步也可构造出更为神奇的奇幻方，故命名为horse法。
偶阶幻方 
当n为偶数时，我们称幻方为偶阶幻方。当n可以被4整除时，我们称该偶阶幻方为双偶幻方；当n不可被4整除时，我们称该偶阶幻方为单偶幻方。可用了Hire法、Strachey以及YinMagic将其实现，Strachey为单偶模型，我对双偶(4m阶）进行了重新修改，制作了另一个可行的数学模型，称之为Spring。YinMagic是我于2002年设计的模型，他可以生成任意的偶阶幻方。
在填幻方前我们做如下约定：如填定数字超出幻方格范围，则把幻方看成是可以无限伸展的图形，如下图：
Merzirac法生成奇阶幻方 
在第一行居中的方格内放1，依次向右上方填入2、3、4…，如果右上方已有数字，则向下移一格继续填写。如下图用Merziral法生成的5阶幻方：
17
24
1
8
15
23
5
7
14
16
4
6
13
20
22
10
12
19
21
3
11
18
25
2
9
loubere法生成奇阶幻方 
在居中的方格向上一格内放1，依次向右上方填入2、3、4…，如果右上方已有数字，则向上移二格继续填写。如下图用Louberel法生成的7阶幻方：
30 39 48 1 10 19 28 
38 47 7 9 18 27 29 
46 6 8 17 26 35 37 
5 14 16 25 34 36 45 
13 15 24 33 42 44 4 
21 23 32 41 43 3 12 
22 31 40 49 2 11 20 
horse法生成奇阶幻方 
先在任意一格内放入1。向左走1步，并下走2步放入2（称为马步），向左走1步，并下走2步放入3，依次类推放到n。在n的下方放入n+1（称为跳步），再按上述方法放置到2n，在2n的下边放入2n+1。如下图用Horse法生成的9阶幻方：
77 58 39 20 1 72 53 34 15 
6 68 49 30 11 73 63 44 25 
16 78 59 40 21 2 64 54 35 
26 7 69 50 31 12 74 55 45 
36 17 79 60 41 22 3 65 46 
37 27 8 70 51 32 13 75 56 
47 28 18 80 61 42 23 4 66 
57 38 19 9 71 52 33 14 76 
67 48 29 10 81 62 43 24 5 
一般的，令矩阵[1,1]为向右走一步，向上走一步，[-1,0]为向左走一步。则马步可以表示为2X+Y，{X∈{[1,0],[-1,0]},Y∈{[0,1],[0,-1]}}∪{Y∈{[1,0],[-1,0]},X∈{[0,1],[0,-1]}}。对于2X+Y相应的跳步可以为2Y,-Y,X,-Y,X,3X,3X+3Y。上面的的是X型跳步。Horse法生成的幻方为魔鬼幻方。
Hire法生成偶阶幻方 
将n阶幻方看作一个矩阵，记为A，其中的第i行j列方格内的数字记为a(i,j）。在A内两对角线上填写1、2、3、……、n，各行再填写1、2、3、……、n，使各行各列数字之和为n*(n+1)/2。填写方法为：第1行从n到1填写，从第2行到第n/2行按从1到进行填写（第2行第1列填n，第2行第n列填1)，从第n/2+1到第n行按n到1进行填写，对角线的方格内数字不变。如下所示为6阶填写方法：
1 5 4 3 2 6 
6 2 3 4 5 1 
1 2 3 4 5 6 
6 5 3 4 2 1 
6 2 4 3 5 1 
1 5 4 3 2 6 
如下所示为8阶填写方法（转置以后）：
1 8 1 1 8 8 8 1 
7 2 2 2 7 7 2 7 
6 3 3 3 6 3 6 6 
5 4 4 4 4 5 5 5 
4 5 5 5 5 4 4 4 
3 6 6 6 3 6 3 3 
2 7 7 7 2 2 7 2 
8 1 8 8 1 1 1 8 
将A上所有数字分别按如下算法计算，得到B，其中b(i,j)=n×（a(i,j）－1)。则AT+B为目标幻方 
（AT为A的转置矩阵）。如下图用Hire法生成的8阶幻方：
1 63 6 5 60 59 58 8 
56 10 11 12 53 54 15 49 
41 18 19 20 45 22 47 48 
33 26 27 28 29 38 39 40 
32 39 38 36 37 27 26 25 
24 47 43 45 20 46 18 17 
16 50 54 53 12 11 55 9 
57 7 62 61 4 3 2 64 
⑴.Strachey法生成单偶幻方 
将n阶单偶幻方表示为4m+2阶幻方。将其等分为四分，成为如下图所示A、B、C、D四个2m+1阶奇数幻方。
A C 
D B 
A用1至2m+1填写成(2m+1)2阶幻方；B用(2m+1)2+1至2*(2m+1)2填写成2m+1阶幻方；C用2*(2m+1)2+1至3*(2m+1)2填写成2m+1阶幻方；D用3*(2m+1)2+1至4*(2m+1)2填写成2m+1阶幻方；在A中间一行取m个小格，其中1格为该行居中1小格，另外m-1个小格任意，其他行左侧边缘取m列，将其与D相应方格内交换；B与C接近右侧m-1列相互交换。如下图用Strachey法生成的6阶幻方：
35 1 6 26 19 24 
3 32 7 21 23 25 
31 9 2 22 27 20 
8 28 33 17 10 15 
30 5 34 12 14 16 
4 36 29 13 18 11 
⑵N 为其它偶数时
当n为非4倍数的偶数（即4n+2形）时：首先把大方阵分解为4个奇数(2m+1阶）子方阵。
按上述奇数阶幻方给分解的4个子方阵对应赋值
上左子阵最小（i），下右子阵次小（i+v），下左子阵最大（i+3v），上右子阵次大（i+2v)
即4个子方阵对应元素相差v，其中v=n*n/4
四个子矩阵由小到大排列方式为 ① ③
④ ②
然后作相应的元素交换：a(i,j）与a(i+u,j）在同一列做对应交换（j<t或j>n-t+2),
a(t-1,0）与a(t+u-1,0）；a(t-1,t-1)与a(t+u-1,t-1)两对元素交换
其中u=n/2，t=(n+2)/4 上述交换使每行每列与两对角线上元素之和相等。
-----------------------
Spring法生成以偶幻方 
将n阶双偶幻方表示为4m阶幻方。将n阶幻方看作一个矩阵，记为A，其中的第i行j列方格内的数字记为a(i,j）。
先令a(i,j)=(i-1)*n+j，即第一行从左到可分别填写1、2、3、……、n；即第二行从左到可分别填写n+1、n+2、n+3、……、2n；…………之后进行对角交换。对角交换有两种方法：
方法一；将左上区域i+j为偶数的与幻方内以中心点为对称点的右下角对角数字进行交换；将右上区域i+j为奇数的与幻方内以中心点为对称点的左下角对角数字进行交换。（保证不同时为奇或偶即可。） 
方法二；将幻方等分成m*m个4阶幻方，将各4阶幻方中对角线上的方格内数字与n阶幻方内以中心点为对称点的对角数字进行交换。
如下图用Spring法生成的4阶幻方：
16 2 3 13 
5 11 10 8 
9 7 6 12 
4 14 15 1 
YinMagic构造偶阶幻方 
先构造n-2幻方，之后将其中的数字全部加上2n-2，放于n阶幻方中间，再用该方法将边缘数字填写完毕。该方法适用于n>4的所有幻方，我于2002年12月31日构造的数学模型。YinMagic法可生成6阶以上的偶幻方。如下图用YinMagic法生成的6阶幻方：
10 1 34 33 5 28 
29 23 22 11 18 8 
30 12 17 24 21 7 
2 26 19 14 15 35 
31 13 16 25 20 6 
9 36 3 4 32 27 
魔鬼幻方 
如将幻方看成是无限伸展的图形，则任何一个相邻的n*n方格内的数字都可以组成一个幻方。则称该幻方为魔鬼幻方。
用我研究的Horse法构造的幻方是魔鬼幻方。如下的幻方更是魔鬼幻方，因为对于任意四个在两行两列上的数字，他们的和都是34。此幻方可用YinMagic方法生成。
15 10 3 6 
4 5 16 9 
14 11 2 7 
1 8 13 12 
罗伯法：
1居上行正中央，依次斜填右上方，上出框往下填，
右出框左边放，排重便在下格填，右上排重一个样。
三阶幻方
8
1
6
3
5
7
4
9
2
如图，1和7相加除以2=4
1和3相加除以2=2
……