102年 公 務 人 員 普 通 考 試 試 題 代號:44120 類 科: 資訊處理
科 目: 程式設計概要
考試時間: 1 小時 30 分 座號:
※注意: 禁止使用電子計算器。
不必抄題,作答時請將試題題號及答案依照順序寫在試卷上,於本試題上作答者,不予計分。
全一頁
注意:若題目有模糊之處,請在答題時說明相關假設。
設計一個質因數分解的程式,我們收集下面的資訊:
質數是指一個正整數除了 1 及自己以外,沒有其它的因數。
一個正整數 n,若有質因數 P ≥ 0,則 P ≤ n。
為了加速程式運作,我們做下列規劃:
以陣列 PrimeAry 來(容量 2000,由小到大依序)儲存已知的質數,PrimeNum 用來說 明最後一個(最大)質數的陣列位置。
陣列 PrimeAry 啟始時,僅儲存質數 2。
根據上列敘述,撰寫程式回答下列問題:
一、假設目前陣列 PrimeAry 儲存所有比 n 小的質數,撰寫一函數 IsPrime(n)判別 n 是 否為質數。譬如:IsPrime(3)回覆 True,IsPrime(4)回覆 False。(15 分)
撰寫一函數 BuildPrime(m),使用 IsPrime 函數建立陣列 PrimeAry,使其擁有小於 或等於 m 的所有質數。譬如:BuildPrime(5)將使 PrimeAry 陣列依序儲存 2, 3, 5,
而 BuildPrime(10)將使 PrimeAry 陣列依序儲存 2, 3, 5, 7。(15 分)
二、假設目前陣列 PrimeAry 儲存所有比 n 小的質數,撰寫一遞迴函數(Recursive function)FactorTimes(n, p),回覆正整數 n 含有質數 p 的因數次數。譬如:
11 3
2
792= 3× 2× , FactorTimes(792, 2) 回覆 3 , FactorTimes(792, 3) 回覆 2 , FactorTimes(792, 5)回覆 0,FactorTimes(792, 11)回覆 1。(15 分)
假設目前陣列 PrimeAry 儲存所有比 n 小的質數,撰寫一函數 PrimeFactor(n)求出 正整數 n 的質因數及其因數次數,並將結果以字串傳回。譬如:PrimeFactor(20)將 回傳字串"2^2 * 5",PrimeFactor(72)將回傳字串"2^3 * 3^2",而 PrimeFactor(97)將 回傳字串"97"。(15 分)
三、若將上述方法(主程式除外)封裝成一個類別 PrimeClass,請實踐上述規劃的
及。(10 分)
使用網頁技術來建立下列系統:要求使用者輸入一個小於 10000 的正整數,判別它 是否在要求的範圍內;該判別方法(名稱為 Check_Inp_Val)必須在客戶端(Client)
完成,不可在伺服器(Server)完成。若輸入值在範圍內,則呼叫伺服器端處理 函數 mainPrime;否則在網頁直接發布相關訊息,中斷處理(不呼叫處理函數 mainPrime)。(20 分)
請撰寫處理函數 mainPrime,讓系統可以求出輸入數值的質因數分解。(10 分)