這道題是筆者當年參加競賽的題目,多年來一直未得其解,久久不能釋懷。近日,重新拿起該題細細研究,終於將其解出,著文以記之。
問題描述:
長方體長X,寬Y,高Z。X、Y、Z都是正整數。長方體由長1、寬1、高1的正方體堆積而成。那么長方體的體對角線穿過多少個正方體?
這個題考量三維空間的想象。近日研究的時候,嘗試先考量二維的情況,在求解出二維的情況下,在推廣到三維里。下面是二維情況下的問題描述
長方形長X,寬Y。X、Y都是正整數。長方形由長1、寬1的正方形組成。那么長方形的對角線穿過多少個正方形?
以實例說明。長方形長6,寬4。長方形由長1、寬1的正方形組成。那么長方形的對角線穿過多少個正方形?
這個還是比較簡單的,直接用圖表示即可,如下圖所示:
如上圖所示,對角線一共穿過8個正方形(灰色部分)。但是,我們不可能每個問題都畫圖表示,比如長777,寬581的長方形的解就很難畫圖表示(數字太大,不容易精確表示)。
仔細看看,這8個正方形實際上把對角線分成了8段。線段的端點是對角線和水平線(或豎直線)的交點。
於是,問題似乎可以轉化成
要求穿過多少個正方形,實際上相當於求有多少個線段
要求有多少個線段,實際上相當於求對角線和水平線和垂直線的交點的個數
把上圖放在平面直角坐標系中,左下角坐標為(0,0),右上角坐標為(6,4)
則對角線的直線方程為
和我們一般想象中的直線方程不太一樣。沒關系,首先這個是正確的直線方程,其次是為了和后面的三維中的直線方程的表現形式統一。
我們把對角線和水平線(或豎直線)的交點在圖上標示出來(為了后文的描述方便,我用不同顏色標示點)
左下角的起點用灰色標示,紅色的點標示對角線和豎直線的交點(交點的橫坐標是整數),綠色的點標示對角線和水平線的交點(交點的縱坐標是整數)
起點不算,則穿過的方塊數和線段數和點的個數一致(都是8個)。
紅色點的坐標(橫坐標是整數)分別是:
個數和長方形的長的數值是一致的(是6)
綠色點的坐標(縱坐標是整數)分別是:
個數和長方形的寬的數值是一致的(是4)
可以看出,紅色點和綠色點有2個點是重合的(圖上用半紅半綠的點標示),因此這些點合在一起就是如下(按照和起點的遠近來進行排序)
於是該問題的求解過程可以如下表示:
1、求出橫坐標是整數的點的個數,就是長方形長的數值。本題是6
2、求出縱坐標是整數的點的個數,就是長方體寬的數值。本題是4
3、求出步驟1和步驟2中重合的點的個數,也就是橫縱坐標都是整數的點的個數。本題是2
4、問題的答案:步驟1的答案+步驟2的答案-步驟3的答案。本題是6+4-2=8
步驟1、2、3、4中,關鍵是步驟3,如何求出步驟1和步驟2中重合的點的個數,也就是橫縱坐標都是整數的點的個數。
最大公約數:正整數a和b,若a能被b整除,則a是b的倍數,b是a的約數。正整數a和b中約數最大的那個稱為a和b的最大公約數,記作gcd(a,b)
本題中,(4,6)=2,正好是步驟3的答數,是巧合么?不是,接下來我們來證明。
證明:長X、寬Y的長方形,對角線經過雙整數點(橫縱坐標都是整數)的個數為gcd(X,Y)(注:不算起點)
證:令x1=X/gcd(X,Y),y1=Y/gcd(X,Y)。則x1和y1都是整數,且x1和y1互質(除1以外,沒有公約數)。
對角線所在的直線方程為
當x取整數時(1≤x≤X)時,要使y也是整數,則x必須取x1的倍數(這樣才能把分母完全約掉)
而在1到X之間,x1的倍數一共有gcd(X,Y)個
證明完畢
綜上所述:長方形長X,寬Y。X、Y都是正整數。長方形由長1、寬1的正方形組成。那么長方形的對角線穿過多少個正方形?
其解為:Ans=X+Y-gcd(X,Y),可以用下圖表示
例如:
長6,寬4的長方形的對角線穿過6+4-gcd(6,4)=6+4-2=8個正方形
長5,寬3的長方形的對角線穿過5+3-gcd(5,3)=5+3-1=7個正方形
長12,寬8的長方形的對角線穿過12+8-gcd(12,8)=12+8-4=16個正方形
擴展到三維。長方體長X,寬Y,高Z。X、Y、Z都是正整數。長方體由長1、寬1、高1的正方體堆積而成。那么長方體的體對角線穿過多少個正方體?
長X、寬Y、高Z的立方體的體對角線的直線方程是
這個方程雖然有點怪,但是學過空間解析幾何的都明白這個方程的正確性
求解的過程和二維的類似,也是找尋坐標是整數的點。可以用下圖表示:
其解為:Ans=X+Y+Z-gcd(X,Y)-gcd(X,Z)-gcd(Y,Z)+gcd(X,Y,Z)
例如:
長5,寬3,高4的長方體的體對角線穿過5+3+4-gcd(5,3)-gcd(5,4)-gcd(3,4)+gcd(5,3,4)=5+3+4-1-1-1+1=10個正方體
長8,寬6,高3的長方體的體對角線穿過8+6+3-gcd(8,6)-gcd(8,3)-gcd(6,3)+gcd(8,6,3)=8+6+3-2-1-3+1=12個正方體
長12,寬8,高6的長方體的體對角線穿過12+8+6-gcd(12,8)-gcd(12,6)-gcd(8,6)+gcd(12,8,6)=12+8+6-4-6-2+2=16個正方體
下圖是長5,寬3,高4的長方體的體對角線穿過正方體的示意圖,一共10個正方體,你看清了么?
這個題歷時若干年,總是百思不得其解。也是今朝靈光一閃,終於把該題解決了。也總算是一塊石頭落了地