王德貴
通過前幾期文章,我們對于數(shù)學黑洞有了一定的了解,今天我們繼續(xù)用Python來分析和研究數(shù)學黑洞——“冰雹猜想”。
我們先來了解一下“冰雹猜想”的來歷。
1976年的一天,《華盛頓郵報》于頭版頭條報道了一條數(shù)學新聞。文中記敘了這樣一個故事:
70年代中期,美國各所名牌大學校園內(nèi),人們都像發(fā)瘋一般,夜以繼日,廢寢忘食地玩弄一種數(shù)學游戲。這個游戲十分簡單:任意寫出一個正整數(shù)N,并且按照以下的規(guī)律進行變換:
如果是個奇數(shù),則下一步變成3N+1。
如果是個偶數(shù),則下一步變成N/2。
不單單是學生,甚至連教師、研究員、教授與學究都紛紛加入。為什么這種游戲的魅力經(jīng)久不衰?因為人們發(fā)現(xiàn),無論N是怎樣一個數(shù)字,最終都無法逃脫回到谷底1。準確地說,是無法逃出落入底部的4-2-1循環(huán),永遠也逃不出這樣的宿命。
這就是著名的“冰雹猜想”,也叫“角谷猜想”“考拉茲猜想”“3X+1猜想”或“歸一問題”,也是著名的數(shù)學黑洞之一。
通過輸入一個正整數(shù),判斷其奇偶性,如果是偶數(shù)則除以2,如果是奇數(shù)則乘以3加1,如此反復,直到結(jié)果為1。
所有循環(huán)條件就是結(jié)果不為“1”,因此使用while循環(huán)比較好,下面看程序設(shè)計。
程序涉及中國電子學會Python編程等級考試二級考試的內(nèi)容:程序的三種結(jié)構(gòu),即順序結(jié)構(gòu)、分支結(jié)構(gòu)和循環(huán)結(jié)構(gòu)。
經(jīng)過幾次數(shù)學黑洞這類問題的研究,類似的程序設(shè)計對我們來說已經(jīng)比較簡單了,語句也很好理解(圖1)。
if分支語句中的print()語句是為了能看到在做怎樣的運算,最后輸出結(jié)果(圖2)。
用27測試,27的運算過程如圖3,沒想到27居然需要這么多步才能進入黑洞。
上述程序為遞推法,我們也可以用遞歸法。那么就會涉及到等級考試四級的遞歸知識點。程序如圖4:
其驗證結(jié)果與其他方法相同。
冰雹的最大魅力在于不可預知性。27是一個很小的自然數(shù),但是如果按照上述方法進行運算,則它經(jīng)過的運算過程上浮下沉異常劇烈:首先,27要經(jīng)過77步的變換到達頂峰值9232,然后又經(jīng)過34步到達谷底值1。全部的變換過程(稱作“雹程”)需要111步,其頂峰值9232,接近原有數(shù)字27的342倍,如果以瀑布般的直線下落(2的N次方)來比較,則具有同樣雹程的數(shù)字N要達到2的111次方。其對比何其驚人(圖5)!
無論這個過程中的數(shù)值如何龐大,都會像瀑布一樣迅速墜落。而其他的數(shù)字即使不是如此,在經(jīng)過若干次的變換之后也必然會到純偶數(shù):4-2-1的循環(huán)。
冰雹猜想是否正確?一個思路是尋找反例,找到反例即說明猜想不成立。我們已經(jīng)編寫了計算機程序來驗證一個數(shù)是否滿足猜想。而且當X為正奇數(shù)時,3X+1一定為偶數(shù),我們可對變換規(guī)則做出簡化:若X為奇數(shù),則變?yōu)椋?X+1)/2;若X為偶數(shù),則變?yōu)閄/2。
采用這個簡化規(guī)則可以加快程序運行速度。
據(jù)日本和美國的數(shù)學家攻關(guān)研究,小于7*10^11的所有的正整數(shù),都符合這個規(guī)律。在這個龐大數(shù)量的驗證中,并沒有找到反例。這樣看,冰雹猜想“很有可能”是正確的,但又不能絕對肯定。
不過,我們?nèi)钥赏ㄟ^編程來探究冰雹猜想的性質(zhì)。以X=500為例,我們把每一次變換得到的數(shù)畫成圖(注意這里用了簡化的變換規(guī)則)(圖6)。
變換過程中數(shù)字大小存在快速的上升下降,到最高點后很快落至1。另外,我們可以探究X變?yōu)?所需變換次數(shù)N與X的關(guān)系。在2≤X≤1000范圍內(nèi),N與X的關(guān)系圖如圖7(橫軸為lg X,縱軸為N)。
數(shù)據(jù)點大致分布在兩條平行直線之間,由于橫軸取了對數(shù),這表明N隨X大致以對數(shù)規(guī)律變化。當然,我們并不能確定這一結(jié)論在更大范圍成立,這一結(jié)論是推測性的。
我看到過這項證明的英文版,有興趣的朋友可以自己查一下。本文也是我自己的心得,有不妥之處,請各位老師和同學斧正!