題目來源:104年度高雄市scratch競賽(阿玉老師網站)
題目:質因數分解 <目前解法>
說明:1、質因數是質數且是因數。
2、所謂質數是正整數,即大於1的自然數,該數除1和該數自身之外不能被任何自然數整除的數,如2﹐3﹐5﹐7﹐11﹐13------等。
3、所謂因數可以這樣說明,假如整數n除以m,結果沒有餘數,也就是n能被m整除,如10能被5整除,那5就是10的因數。
4、本題要設計者寫一程式,讓使用者輸入一個三位數的正整數即(1~999 ),程式可以列出它的質因數。
5、例如:
(1) 輸入 12
畫面會出現12=2×2×3
(2) 輸入 25
畫面會出現25=5×5
(3) 輸入 140
畫面會出現140=2×2×5×7
6、畫面規劃或對話方式請參考評分準則自行設計。
解法:
將使用者輸入的數字(目標數)進行質因數分解。
1.檢查目標數,是否能被質數整除。若可以被整除,就是找到一個質因數,將該數存入質因數清單(陣列)。
ex:44除以2=22,可以被質數2整除。將2存入質因數清單。
1-2.若能整除,須以以剛剛的質數再除一次,因為質因數可能會重複。
ex:44除以2=22餘0,22除以2=11餘0。11除以2=5餘1。質因數清單裡必須有兩個2。
1-3.再找質因數的過程中,每整除一次,必須將目標數改為整除過後的數。
ex:44/2=22...0。此時,再往下找質因數時,是以22來測試是否能被質數整除,也就是22/2=11....0
1-4.若無法整除,則繼續往上找質數來測試是否能整除目標數。一直找到質因數比目標數大才停止。
2.因為使用者輸入的最大數是999,所以必須先有質數清單。
2-1如何找質數:質數只能被1和自己整除。以此題為例,要找到1~999的質數。從2開始,檢查2的因數有幾個,檢查3的因數有幾個.......檢查999的因數有幾個。只要是因數只有兩個的,就將該數字存入質數清單。
從2開始找(並命名為now),因為1不會是質數。
每個數字都從1開始測試是否能被整除。命名為除數。
巢狀迴圈是用來記錄有幾個數字可以整除now。若now能被除數整除,則now的因數數量+1。
判斷,如果因數數量=2,則該數為質數。將該數存入999內的質數清單。
點及角色後會說明。並讀取使用者目標數。
將Temp變數內容改為目標數。
從質數清單中的第一個開始,拿來除目標數,如果可以被整除,則將該數字新增至質因數清單中。
並且將TEMP改為被整除後的商。
ex:44/2=22,原本TEMP是44,此時改成22。
如果無法被整除,繼續測試下一個質數。
測試到質數比TEMP大為止。
想要結合清單成為字串,但目前失敗。