種類
完全幻方
完全幻方指一個幻方行、列、主對角線及泛對角線各數之和均相等。
乘幻方
乘幻方指一個幻方行列、對角線各數乘積相等。
高次幻方
n階幻方是由前n^2(n的2次方)個自然數組成的一個n階
方陣,其各行、各列及兩條對角線所含的
n個數的和相等。例子:(三階幻方,幻和為15,)
高次幻方是指,當組成幻方各數替換為其2,3,...,k次冪時,仍滿足幻方條件者,稱此幻方為k次幻方。
反幻方
反幻方的定義:在一個由若干個排列整齊的數組成的正方形中,圖中任意一橫行、一縱行及對角線的幾個數之和不相等,具有這種性質的圖表,稱為“反幻方”。
反幻方與正幻方最大的不同點是幻和不同,正幻方所有幻和都相同,而反幻方所有幻和都不同。所謂幻和就是幻方的任意行、列及
對角線幾個數之和。如下圖3階反幻方的比較。
圖中框線外圍的數字之和就是幻和。紅色為
偶數,黑色為奇數。
可以說反幻方是一種特殊的幻方。反幻方的幻和可以全部不同,也可以部分相同。如下圖多種3階反幻方。
三階幻方
如圖,1和7相加除以2=4
1和3相加除以2=2
……
起源記載
在一個由若干個排列整齊的數組成的正方形中,圖中任意一橫行、一縱行及
對角線的幾個數之和都相等,具有這種性質的圖表,稱為“幻方”。中國古代稱為“
河圖”、“
洛書”,又叫“
縱橫圖”。
九宮洛書蘊含奇門遁甲的布陣之道。九宮之數源於《易經》。幻方也稱
縱橫圖、
魔方、
魔陣,它是科學的結晶與吉祥的象徵,發源於中國古代的洛書——
九宮圖。公元前一世紀,
西漢宣帝時的
博士戴德在他的政治禮儀著作《大戴禮·明堂篇》中就有“二、九、四、七、五、三、六、一、八”的洛書九宮數記載。洛書被世界公認為組合數學的鼻祖,它是中華民族對人類的偉大貢獻之一。同時,洛書以其高度抽象的內涵,對中國古代政治倫理、數學、天文氣象、哲學、醫學、宗教等都產生了重要影響。在遠古傳說中,於治國安邦上也具有積極的寓意!包括洛書在內的幻方自古以來在亞、歐、美洲不少國家都被作為驅邪避凶的吉祥物,這種古代地域廣泛的
圖騰應該說是極其少見的。1975年
上海人民出版社出版的自然辯證法叢書《自然科學大事年表》,對於幻方作了特別的述說:“公元前一世紀,《
大戴禮》記載,中國古代有象徵吉祥的河圖洛書縱橫圖,即為九宮算,被認為是現代‘組合數學’最古老的發現。”還附了全書唯一的插圖!
2500年前,孔子在他研究《易經》的著作《系詞上傳》中記載了:“河出圖,洛出書,聖人則之。”最早將數字與洛書相連的記載是2300年前的《莊子·天運》,它認為:“天有六極
五常,帝王順之則治,逆之則凶。九洛之事,治成德備,監照下土,天下戴之,此謂上皇。”明代數學家
程大位在《算法統宗》中也曾發出“數何肇?其肇自圖、書乎?伏羲得之以畫卦,大禹得之以序疇,列聖得之以開物”的感嘆,大意是說,數起源於遠古時代黃河出現的河圖與洛水出現的洛書,伏羲依靠河圖畫出八卦,大禹按照洛書劃分九州,並制定治理天下的九類大法,聖人們根據它們演繹出各種治國安邦的良策,對人類社會與自然界的認識也得到步步深化。大禹從洛書
中數的相互制約,均衡統一得到啟發而制定國家的法律體系,使得天下一統,歸於大治,這是借鑑思維的開端。這種活化思維的方式已成為科學靈感的來源之一。從洛書發端的幻方在數千年後更加生機盎然,被稱為具有永恆魅力的數學問題。
十三世紀,中國
南宋數學家
楊輝在世界上首先開展了對幻方的系統研究,歐洲十四世紀也開始了這方面的工作。著名數學家費爾瑪、歐拉都進行過幻方研究,如今,幻方仍然是組合數學的研究課題之一,經過一代代數學家與數學愛好者的共同努力,幻方與它的變體所蘊含的各種神奇的科學性質正逐步得到揭示。它已在
組合分析、實驗設計、
圖論、
數論、群、對策論、紡織、工藝美術、程式設計、人工智慧等領域得到廣泛套用。1977年,4階幻方還作為人類的特殊語言被美國旅行者1號、2號飛船攜入太空,向廣袤的宇宙中可能存在的外星人傳達人類的文明信息與美好祝願。
歷史發展
幻方的幻在於無論取哪一條路線,最後得到的和或積都是完全相同的。
大約兩千多年前西漢時代,流傳
夏禹治水時,黃河中躍出一匹神馬,馬背上馱著一幅圖,人稱「
河圖」;又洛水河中浮出一隻神龜,龜背上有一張象徵吉祥的圖案稱為「
洛書」.他們發現,這個圖案每一列,每一行及
對角線,加起來的數字和都是一樣的,這就是我們所稱的幻方.也有人認為"洛書"是外星人遺物;而"河圖"則是描述了
宇宙生物(包括外星人)的基因排序規則,幻方是外星人向地球人的自我介紹.另外在上海浦東
陸家嘴地區挖出了一塊元朝時代伊斯蘭教信徒所掛的玉掛,玉掛的正面寫著:「萬物非主,惟有真宰,默罕默德,為其使者」,而玉掛的另一面就是一個四階幻方.
關於幻方的起源,中國有“
河圖”和“洛書”之說。相傳在遠古時期,
伏羲氏取得天下,把國家治理得井井有條,感動了上天,於是黃河中躍出一匹龍馬,背上馱著一張圖,作為禮物獻給他,這就是“河圖”,也是最早的幻方。伏羲氏憑藉著“河圖”而演繹出了八卦,後來大禹治洪水時,洛水中浮出一隻大烏龜,它的背上有圖有字,人們稱之為“洛書”。“洛書”所畫的圖中共有黑、白圓圈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年).這是歐洲最古老的幻方.
清末民初數學家壽孝天自攥:
1956年冬,陝西省西安市郊元朝安西王府出土的金屬鐵板:
紀錄
中國幻方協會前十位大師級人物:李文,郭先強,潘鳳雛,蘇茂挺,鍾明,吳碩辛,曹陵,牛國良,彭保旺,曾學涵,他們全是中國的草根幻方達人,在幻方的學術研究上取得了一系列重大成果,很多研究成果領先於世界幻方研究同行。許仲義,李抗強,王忠漢,郭大焱,林正錄等幻方前輩,他們也為中國幻方的研究與發展作出了無私的奉獻,還有很多我們可能已經忘記了他們的名字,或許他們過去的研究成果在今天看來已經平淡無奇,但他們的歷史階段為我們後來者的研究提供了積極的養分。本協會一系列的幻方研究者,為中國乃至世界幻方學術研究、推廣普及事業一直不懈奮鬥著並將繼續努力奉獻。
中國取得不少幻方世界紀錄:幻方專家
李文第一位構造成功10階標準
幻立方,第一位構造出最低階729階五次幻方,第一位構造出最牛的36階廣義五次幻方,第一位理論上證明了存在最難的完美平方幻方,和多項平方幻方世界紀錄,幻方專家蘇茂挺第一位構成功32階完美平方幻方.等。
提醒大家注意,任意階幻方
構造法,任意維幻方構造法,任意次幻方構造法,都早已找到。
不存在最大階幻方的世界紀錄之類.
對於各種媒體報導的幻方世界之最,很多是不實報導,不存在未解最大階數幻方。
幻方欣賞
中國幻方網站
線上二維任意階幻方生成;
法國高次幻方網站;
日本多維幻方網站;
富蘭克林的幻方;
九階平方幻方;
構造原理
在《射鵰英雄傳》中郭黃二人被
裘千仞追到黑龍潭,躲進
瑛姑的小屋。瑛姑出了一道題:數字1~9填到三行三列的表格中,要求每行、每列、及兩條對角線上的和都相等。這道題難倒了瑛姑十幾年,被
黃蓉一下子就答出來了。
這就是一個最簡單的3階平面幻方。因為幻方的智力性和趣味性,很多遊戲和玩具都與幻方有關,如捉放曹、我們平時玩的六面體,也成為學習編程時的常見問題。
幻方又稱
縱橫圖、
九宮圖,最早記錄於中國古代的洛書。夏禹治水時,河南洛陽附近的大河裡浮出了一隻烏龜,背上有一個很奇怪的圖形,古人認為是一種祥瑞,預示著洪水將被夏禹王徹底制服。後人稱之為"洛書"或"河圖",又叫河洛圖。
南宋數學家楊輝,在他著的《續古摘奇算法》里介紹了這種方法:只要將九個自然數按照從小到大的遞增次序斜排,然後把上、下兩數對調,左、右兩數也對調;最後再把中部四數各向外面挺出,幻方就出現了。
最簡單的幻方就是平面幻方,還有立體幻方、高次幻方等。對於立體幻方、高次幻方世界上很多數學家仍在研究,只討論平面幻方。
對平面幻方的構造,分為三種情況:N為奇數、N為4的倍數、N為其它偶數(4n+2的形式)
1、 N 為奇數時,最簡單:
⑴ 將1放在第一行中間一列;
⑵ 從2開始直到n×n止各數依次按下列規則存放:
按 45°方向行走,如向右上
每一個數存放的行比前一個數的行數減1,列數加1
⑶ 如果行列範圍超出矩陣範圍,則迴繞。
例如1在第1行,則2應放在最下一行,列數同樣加1;
⑷ 如果按上面規則確定的位置上已有數,或上一個數是第1行第n列時,
則把下一個數放在上一個數的下面。
2、 N為4的倍數時
首先把數1到n×n按從上至下,從左到右順序填入矩陣
然後將方陣的所有4×4子方陣中的兩
對角線上位置的數關於方陣中心作對
稱交換,即a(i,j)與a(n+1-i,n+1-j)交換,所有其它位置上的數不變。
(或者將對角線不變,其它位置對稱交換也可)
**以上方法只適合於n=4時**
當n為非4倍數的偶數(即4n+2形)時:首先把大方陣分解為4個
奇數(2m+1階)子方陣。
按上述奇數階幻方給分解的4個子方陣對應賦值
由小到大依次為上左子陣(i),下右子(i+v),上右子陣(i+2v),下左子陣(i+3v),
即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);void main(){ int i,j,n,k,t,p,x; scanf("%d",&n); sum=(n*n+1)*n/2; if(n%2==1) //奇數幻方 ins(n); if(n%4==2) { //單偶數幻方 k=n/2; ins(k); for(i=0; i<k; i++) for(j=0; j<k; j++){ a[i][j+k]=a[i][j]+2*k*k; a[i+k][j]=a[i][j]+3*k*k; a[i+k][j+k]=a[i][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[i][j]; a[i][j]=a[i+k][j]; a[i+k][j]=p; } if((j<t)&&(i>k-t-1)){ p=a[i][j]; a[i][j]=a[i+k][j]; a[i+k][j]=p; } if((i>=t&&i<=k-t-1)&&(j>=t&&j<t*2)){ p=a[i][j]; a[i][j]=a[i+k][j]; a[i+k][j]=p; } if(j>1&&j<=t){ p=a[i][j+k]; a[i][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[i][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[i][j]); printf("\n"); } } } int check(int n) { //檢驗是否是幻方 int i,j,sum1=0,sum2; for(i=0; i<n; i++){ for(j=0; j<n; j++) sum1+=a[i][j]; if(sum1!=sum) return 0; sum1=0; } for(i=0; i<n; i++){ for(j=0; j<n; j++) sum1+=a[i][j]; if(sum1!=sum) return 0; sum1=0; } for(sum1=0,sum2=0,i=0,j=0; i<n; i++,j++){ sum1+=a[i][j]; sum2+=a[i][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; } }}
c++語言實現
(1)求奇數幻方
#include"stdio.h"#include"math.h"int a[256][256];int sum;int check();void ins(int n);void main(){ int i,j,n,k,t,p,x; scanf("%d",&n); sum=(n*n+1)*n/2; if(n%2==1) //奇數幻方 ins(n); if(n%4==2) { //單偶數幻方 k=n/2; ins(k); for(i=0; i<k; i++) for(j=0; j<k; j++){ a[i][j+k]=a[i][j]+2*k*k; a[i+k][j]=a[i][j]+3*k*k; a[i+k][j+k]=a[i][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[i][j]; a[i][j]=a[i+k][j]; a[i+k][j]=p; } if((j<t)&&(i>k-t-1)){ p=a[i][j]; a[i][j]=a[i+k][j]; a[i+k][j]=p; } if((i>=t&&i<=k-t-1)&&(j>=t&&j<t*2)){ p=a[i][j]; a[i][j]=a[i+k][j]; a[i+k][j]=p; } if(j>1&&j<=t){ p=a[i][j+k]; a[i][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[i][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[i][j]); printf("\n"); } } } int check(int n) { //檢驗是否是幻方 int i,j,sum1=0,sum2; for(i=0; i<n; i++){ for(j=0; j<n; j++) sum1+=a[i][j]; if(sum1!=sum) return 0; sum1=0; } for(i=0; i<n; i++){ for(j=0; j<n; j++) sum1+=a[i][j]; if(sum1!=sum) return 0; sum1=0; } for(sum1=0,sum2=0,i=0,j=0; i<n; i++,j++){ sum1+=a[i][j]; sum2+=a[i][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; } }}
(2)求單偶幻方
#include<iostream.h>#include<iomanip.h>int main(){ int n,i=0,j=0,a[100][100],tot=0; cout<<"請輸入4的倍數"<<endl; cin>>n; for(i=0;i<n;i++) for(j=0; j<n; j++){ a[i][j]=++tot; } for(i=0; i<n; i++){ for(j=0; j<n; j++){ if(i%4==j%4||i%4+j%4==3) a[i][j]=n*n+1-a[i][j]; } } for(i=0; i<n; i++){ for(j=0; j<n; j++){ cout<<setw(4)<<a[i][j]; } cout<<endl; } return 0;}
奇階幻方
當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法生成的5階幻方:
23 | 6 | 19 | 2 | 15 |
10 | 18 | 1 | 14 | 22 |
17 | 5 | 13 | 21 | 9 |
4 | 12 | 25 | 8 | 16 |
11 | 24 | 7 | 20 | 3 |
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
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
⑵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居上行正中央,依次斜填右上方,上出框往下填,
右出框左邊放,排重便在下格填,右上排重一個樣。
程式編寫
利用計算機編程式,可求解出任意階幻方.(但數字位數受電腦限制,實際上只能是有限範圍內的任意階),如利用
Matlab進行計算n階幻方,其命令為:A=magic(n)。
對於某些平方幻方,高次幻方,利用計算機輔助計算,也可快速求得。
一次幻方,一次幻立方,一次多維幻方,甚至可用簡單公式全部求得。
某些類型的平方幻方,甚至高次
高維幻方,也可用公式求得。
在幻方公式求解方法,中國處於世界領先水平.中國李文的高維高次幻方公式,是幻方理論中的精品.吳碩辛的高次幻方理論,也可用公式求解。
錯位補角
1.對於所有的奇階幻方,1-n*n從小到大填入n*n的方格中。以n=5時,1-25為例。
1 | 2 | 3 | 4 | 5 |
6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 |
2.橫錯位,將方格橫向錯位,每行錯位數為 n-行數,即第一行橫向移動n-1位,第二行橫向移動n-2位...直到形成一個左低右高的樓梯。
| | | | 1 | 2 | 3 | 4 | 5 |
| | | 6 | 7 | 8 | 9 | 10 | |
| | 11 | 12 | 13 | 14 | 15 | | |
| 16 | 17 | 18 | 19 | 20 | | | |
21 | 22 | 23 | 24 | 25 | | | | |
3.橫補角,以中間行為基準,將突出的數字補回本行所缺的方格內,4,5補到1的前,10補到6前,16補到20後,21,22補到25後。從而重新得到一個n*n方格。
4 | 5 | 1 | 2 | 3 |
10 | 6 | 7 | 8 | 9 |
11 | 12 | 13 | 14 | 15 |
17 | 18 | 19 | 20 | 16 |
23 | 24 | 25 | 21 | 22 |
4.豎錯位,將方格縱向錯位,每列錯位數為 n-列數,即第一列橫向移動n-1位,第二列橫向移動n-2位...直到形成一個左低右高的樓梯。
| | | | 3 |
| | | 2 | 9 |
| | 1 | 8 | 15 |
| 5 | 7 | 14 | 16 |
4 | 6 | 13 | 20 | 22 |
10 | 12 | 19 | 21 | |
11 | 18 | 25 | | |
17 | 24 | | | |
23 | | | | |
5.豎補角,以中間列為基準,將突出的數字補回本列所缺的方格內,17,23補到4上,24補到5上,2補到21下,3,9補到22下。從而重新得到一個n*n方格,及得到結果。
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 |
結語:錯位補角可以先橫後豎,也可以先豎後橫。樓梯可以左低右高,也可以左高右低。只要保證橫豎做出的樓梯方向相同,就能得到正確結果。一共可以求出4個答案。