質數的實際應用並不多,有人利用質數來設計齒輪的齒數,也有人利用質數來設計加密演算法。在這一章裡我們也有關於質數的小應用,利用質數來設計一個忍者切數字的小遊戲。
數學關鍵字: 質數。
Scratch程式:
質數有什麼用
長久以來,質數的研究被視為是一個典型的純數問題,並沒有什麼實際的應用。在二次大戰期間許多數學理論被應用在軍事用途,英國專門研究數論的數學家G.H. Hardy甚至不無驕傲地認為質數研究完全與軍事應用無關。
但質數仍然有幾項實際的應用,其中一項是齒輪的設計。當兩個齒輪的齒數都是質數時,較不會遇到某幾齒重複相接觸咬合而造成磨損的情況。如下圖中兩齒輪有1:2的齒數比,小輪的某一齒會固定與大輪的某兩齒反覆接觸,如此一來小輪的齒會集中影響大輪固定的兩齒,而不是平均分擔磨耗給其他齒,因而造成齒輪壽命減短。
到了1970年代,三位麻省理工學院的數學家發展出了一種RSA加密演算法,利用質數的相關計算來做加密。這是一種非常可靠的加密法,只要公開金鑰的長度夠長,要破解RSA加密幾乎是不可能的事,因此被廣泛應用在今天的電子商務。
在下面的程式動手做裡,我們要用質因數做出一個小遊戲,也算是一種另類的質數應用了。
動手做8–4 忍者切數字
[程式設計需求規格]
以Scratch程式做出下列遊戲流程控制和效果,
1. 移動滑鼠會產生刀痕的效果。
2. 舞台由下方往上隨機抛出1到100的數字。
3. 移動滑鼠碰到的數字是合數的話,分數增加一分,同時合數會被切開為兩個因數落下。
4. 移動滑鼠碰到的數字是質數的話,失去一個生命值。
5. 失去三個生命值遊戲結束。
[程式設計角色和舞台]
由範例庫選取數字,並拼貼製做出1–100的數字造型。舞台維持空白即可。
舞台有兩個背景,分別用在遊戲開始和結束。背景是用Scratch內建功能繪製,要注意Scratch內建繪圖工具只能輸入英文字母。
角色「數字1」裡有1到100總共100個數字造型,基本上是由範例庫選取數字造型再進行拼貼,具體做法可以參考動手做8–3。如果在動手做8–3中已經做過一次,可以在動手做8–3的角色「數字」上按右鍵點選「儲存到電腦」,之後再用「上傳角色檔案」的功能就可以複製出相同的100個數字造型。
[程式設計解決方案 — 第一部份]
首先我們先來製做第一項程式設計需求規格,移動滑鼠並產生刀痕的效果。
[程式檢視]
Scratch的幻影特效是將角色淡化,或是說增加角色的透明度。程式[刀8–4.1]和[畫布8–4.1]都各自對角色設定了幻影特效,讓角色有一定的透明度。
當滑鼠移動時,由於程式[刀8–4.1]內設定下筆並重複跟隨滑鼠游標,舞台上會隨著滑鼠移動畫出軌跡線。
畫出刀痕效果的關鍵在於程式[畫布8–4.1]的重複迴圈。迴圈內不斷將淡色的畫布蓋章,然後移到舞台最上層。所以滑鼠軌跡線會不斷被淡色畫布覆蓋,但是由於畫布和刀都有透明度的幻影特效,舞台上的滑鼠軌跡線也就會出現類似刀痕劃過的漸層淡化軌跡。
在舞台顯示三個全域性變數「生命值」、「時間」和「分數」。當「生命值」或是「時間」小於1時,遊戲就會結束。
[程式設計解決方案 — 第二部份]
在第二部份我們要處理和數字相關的部份,也就是程式設計需求規格的項目2–5。
1. 舞台由下方往上隨機抛出1到100的數字。
2. 移動滑鼠碰到的數字是合數的話,分數增加一分,同時合數會被切開為兩個因數落下。
3. 移動滑鼠碰到的數字是質數的話,失去一個生命值。
4. 失去三個生命值遊戲結束。
[程式檢視]
角色「數字1」的程式和「數字2」、「數字3」的造型和程式部分基本上完全相同,最重要的是區分區域變數的設定。在「數字1」中所有新創的變數都必須是區域變數,如此一來只要先完成「數字1」的造型和程式部分,在角色上按下滑鼠右鍵選擇複製,就可以輕鬆地製做出「數字2」和「數字3」。
但是要特別注意的是雖然各種變數都已屬區域性變數,但是角色中的廣播也必須區別開來。因此可以看到程式[數字2 8–4.1]、[數字2 8–4.2]、[數字2 8–4.3]對於廣播的名稱也要稍做修改。
程式[數字1 8–4.3]描述了一個向下開口的抛物線公式,最簡單向下開口的抛物線方程式可以寫成下式,
在程式中t代表了x軸上的變量,h代表了y軸上的變量,同時隨機設定escalate-x和escalate-y的值來讓數字抛物線產生不同的寬和高。
按下小綠旗執行程式後,若是刀切到質數,則數字會旋轉變形,並將生命值減1。
若是刀切到合數,則會將合數一分為二,成為兩個因數然後由舞台落下。像下圖中的合數99會被分解為因數9和11,而合數55會被分解為因數5和11。
延伸閱讀:
Scratch & Math: 天花板上的蜘蛛(一) 天花板上的蜘蛛(二)
Scratch & Math: 直線裡的宇宙觀(一) 直線裡的宇宙觀(二)
Scratch & Math: 不能說的祕密(一) 不能說的祕密(二)
Scratch & Math: 無理的道理(一) 無理的道理(二) 無理的道理(三)
Scratch & Math: 歡樂派(一) 歡樂派(二) 歡樂派(三) 歡樂派(四)
Scratch & Math: 隱藏在花朶裡的祕密(一) 隱藏在花朶裡的祕密(二)
Scratch & Math: 兔子繁殖是一個好問題 (一) 兔子繁殖是一個好問題 (二) 兔子繁殖是一個好問題 (三)