Scratch & Math: 數字積木(一)
兩百多年前移居到美國東部的新移民發現,每隔幾年樹林裡就會發出喧囂的蟬叫聲,就像約定好似地,極大數量的蟬若蟲在春夏之交的某一個星期集體由土裡爬出,在樹上蟬蛻,然後在陽光灑下的樹梢鳴叫。科學家長時間記碌研究的結果顯示,這些蟬每隔 13年或是 17年就會有一次蟬蛻的「大發生」。 13和 17這兩個數字都是所謂的「質數」,「質數」在蟬的世代繁衍中是否發揮了關鍵的影響呢?
數學關鍵字: 質數、算數基本定理。
程式關鍵字:偵錯(Debug)和斷點(Breakpoint)。
Scratch程式:
蟬的生命週期

兩百多年前移居到美國東部的新移民發現每隔幾年樹林裡就會發出喧囂的蟬叫聲,就像約定好似地,極大數量的蟬若蟲在春夏之交的某一個星期集體由土裡爬出,在樹上蟬蛻,然後在陽光灑下的樹梢鳴叫。
這種奇特的現象引起了昆蟲學家的觀注,他們開始記錄研究蟬蛻變的「大發生」。每當初夏達到攝氏約18度的温度時,蟬若蟲會集體開始蛻變為蟬,數量甚至可以達到每平方公尺370隻成蟬的密度,大概就是樹上爬滿了密密麻麻蟬的概念。
在美國東部現在發現有七個種類的蟬會有週期性的「大發生」,奇特的是「大發生」週期只有兩種,分別是13年和17年。其中有三個種類的蟬分佈在偏北部地區,「大發生」週期都是17年,另外四個種類的蟬分佈在偏南部地區,「大發生」週期都是13年。
經過13年或17年在土裡的長時間蟄伏,這些蛻變後的成蟬通常只有一個月到一個半月的生命。昆蟲學家對於如此特別的生命週期展開進一步的調查研究,想推測出背後的原因。
首先被注意到的是13和17這兩個數字,因為這兩個數字都是所謂的「質數」。「質數」在蟬的世代繁衍中是否發揮了關鍵的影響呢?
什麼是質數
在除法裡當除數除以被除數,可能會有不為0的餘數,也可能餘數為0。我們以6為被除數,列出幾個關於6的除式,

在這幾個除式中,除數的大小由1開始遞增到8。很明顯地,當除數大於被除數6時,商永遠都會等於0,而餘數都會等於6。
觀察除數等於1到6的除式,當除數等於1、2、3、6時,餘數是0,也就是說數字6可以被1、2、3、6整除。這時候我們稱1、2、3、6都是數字6的「因數」。
接著再看看數字7的除式,

可以整除數字7的除數只有1、7,數字7只有兩個因數,一個是1,另一個就是本身的數字7。
對於一個大於1的自然數,如果它的因數只有1和它自己,這個自然數就被稱為「質數」。
根據這個定義,我們知道7是一個質數,它可以被寫做兩個因數的乘積,
數字6同樣也有1和數字本身6這兩個因數,但是2和3也是數字6的因數,因此數字6不是一個質數,而被稱做一個「合數」。數字6可以寫做多於一種的因數乘積,
數字1到10中2、3、5、7是質數,而4、6、8、9、10是合數。最特別的是數字1,依照定義,它既不是質數也不是合數。
算數基本定理
大於1的自然數有可能是一個質數,或者是由質數乘積組合出來的合數。我們觀察一下數字1到20,

在上面的表中顯現出數字2到20如果不是質數,就會是質數乘積組合出來的合數。那對於更大的數字,這個觀察是不是仍然成立呢?
古希臘數學家歐幾里德在他的著作「幾何原本」裡對這個問題進行了討論和初步的證明。
對於任意大於1的自然數,都可以分解成一組唯一的質數乘積,這就是數論中的「算數基本定理」。
例如數字864,可以分解為下圖的因數組合,

寫做數學式就會是,

動手做8–1 試除法做質因數分解
[程式設計需求規格]
給定一個大於1的自然數n,用小於n的每一個質數去試除n,如果整除的話該質數就是n的一個因數。
[程式設計角色和舞台]
由範例庫任意選取一個角色造形。舞台維持空白即可。
[程式檢視]
試除法是一種很直覺的尋找質因數方法,在程式中埋設斷點(breakpoint)來觀察資料的變化是一種瞭解流程的有效方法。
在程式[Cat 8–1.2]中,勾選變數「執行斷點」顯示在舞台上,然後在舞台顯示的變數上連續點擊兩下,直到呈現滑桿樣式。接著在舞台顯示的變數按右鍵,叫出如下圖的選單,設定滑動鈕的最小值為0,最大值為1。

當變數「執行斷點」為1時,程式[Cat 8–1.2]的客製方塊會讓角色說出訊息並暫停,直到使用者按下空白鍵。
我們用n=12來走一次流程就可以得到較清楚的感覺。



經過了七個步驟,我們將數字12的質因數分解列在「因數分解清單中」,12=2*2*3。
如果利用滑桿將變數「執行斷點」設為0,程式會一口氣執行完畢,不會顯示所有斷點訊息。

我們可以輸入一個比較大的數,像是1234567887654321,然後執行看看,

利用試除法成功地將十六位數1234567887654321做質因數分解,
1234567887654321 = 3*3*11*37*73*141*137*333667
在上式中有一個很大的質數333667,我們可以再輸入程式驗證一下,

再次計算也顯示數字333667是一個質數。
觀念平台:偵錯(Debug)和斷點(Breakpoint)寫程式的過程難免會出錯。當程式執行結果有錯的時候,我們常說程式裡有臭蟲(bug),須要偵錯除蟲(debug)。會將電腦裡的錯誤說成臭蟲是有典故的。最早創造這個詞的人是美國女性電腦科學家Grace Hopper,1940年代Grace在美國海軍實驗室參與電腦Mark II的研發工作時發現電腦工作異常,經過分析後她發現原因是由於一隻飛蛾卡在電腦零件中導致電腦故障。之後偵錯除蟲(debug)這個詞就漸漸在工程界流行開來,意指找到並更正電腦或是其他系統裡的錯誤。偵錯除蟲是程式設計師必備的技能,市面上也有許多專業的軟體可以幫助偵錯。但是偵錯最簡單常用的方法還是設置斷點(breakpoint),設程式執行到特定的地方暫時停住,然後觀察程式到斷點位置時的變數內容。這樣做可以幫助程式設計師瞭解程式運作的資料流程和變數值,進一步找出程式的錯誤根源然後排除錯誤。在Scratch中可以在舞台顯示許多內建的變數,例如x座標、y座標、方向等等,也可以將使用者自訂的變數和清單顯示在舞台上,這些對於程式偵錯都是非常有用的資訊。必要的時候可以製做類似程式[Cat 8–1.2]的客製方塊讓程式暫停,仔細地觀察變數值來找出程式的錯誤。
週期蟬的生命週期
在這一章開頭的地方我們提到了北美東部的蟬有13年和17年的「大爆發」週期。在「大爆發」發生的時候,為數驚人的蟬若蟲從土裡爬到樹上,蛻變為成蟬。成蟬的生命可以維持一個多月,在這個短短的時間,它們放聲嘶鳴,交配產卵,繁衍出下一代。
關於生物是否能一代代持續繁衍,生物族群的密度是一個關鍵要素。當生物族群的密度小於某一個下限時,可能就會有滅絕的可能性,這種現象稱為雅里氏效應(Allee effect)。蟬的「大爆發」就是一種「超量滿足」的生存策略,像鳥或螳螂這些蟬的天敵終究食量有限,和「大爆發」產生的族群總數相比仍算是少數,生存下來足夠數量和密度的成蟬便可以確保下一代的繁衍。
相較於其他昆蟲的生命週期,蟬要蟄伏在地底13年或是17年是非常長的時間。昆蟲學家的一個推測是因為蟬在地球冰河時期就已經存在,當蛻變為成蟬時如果遇上寒冷的氣候可能不利繁衍。在這種條件下蛻變週期越長的蟬存活機會相對就高。在物競天擇的演化下蟬的生命週期就漸漸變得比較長。
現在我們很清楚13和17都是質數,在演化的天擇中也可能是一種優勢。假設一種螳螂族群數量增減的週期是2年,在第2、4、6、8、10、12、14、16年天敵族群數量會增加,而另一種鳥的生命週期是3年,在第3、6、9、12、15年會大量出現。在這種情況下,13年蟬要每26年才會遇到一次螳螂,每39年才會遇到一次鳥,要遇到這些週期較小的天敵機會就非常小,存活繁衍成功的機會也就大幅地增加了。
還有一種可能性在於不同種類的蟬在同一年出現可能會互相交配繁殖,如果有12年蟬和14年蟬,它們每84年就會遇到一次,雜交繁殖出來特殊品種的蟬會因為數量和密度較小而不容易存活最後導致滅絶。而13年蟬和17年蟬要每221年才會遇到一次,雜交繁殖的機會較小因此也有較大的繁殖成功機會。
現在昆蟲學家已經可以建立數學模型模擬13年蟬、17年蟬和其他生命週期的蟬經過長時間天擇演化後的數量,模擬結果也支持了13年蟬和17年蟬的確會佔有演化上優勢。
延伸閱讀:
Scratch & Math: 天花板上的蜘蛛(一) 天花板上的蜘蛛(二)
Scratch & Math: 直線裡的宇宙觀(一) 直線裡的宇宙觀(二)
Scratch & Math: 不能說的祕密(一) 不能說的祕密(二)
Scratch & Math: 無理的道理(一) 無理的道理(二) 無理的道理(三)
Scratch & Math: 歡樂派(一) 歡樂派(二) 歡樂派(三) 歡樂派(四)
Scratch & Math: 隱藏在花朶裡的祕密(一) 隱藏在花朶裡的祕密(二)
Scratch & Math: 兔子繁殖是一個好問題 (一) 兔子繁殖是一個好問題 (二) 兔子繁殖是一個好問題 (三)