阿摩線上測驗 登入

申論題資訊

試卷:102年 - 102年高等三級暨普通考普通_資訊處理#29218
科目:程式設計
年份:102年
排序:0

題組內容

二、

申論題內容

⑴假設目前陣列 PrimeAry 儲存所有比 n 小的質數,撰寫一遞迴函數(Recursive function)FactorTimes(n, p),回覆正整數 n 含有質數 p 的因數次數。譬如: 792 2 3 11 3 2 = × × , FactorTimes(792, 2) 回覆 3 , FactorTimes(792, 3) 回覆 2 , FactorTimes(792, 5)回覆 0,FactorTimes(792, 11)回覆 1。(15 分)

詳解 (共 2 筆)

詳解 提供者:牛奶鍋

int factortime(int n, int p)

{   if(n%p !=0)
          return 0;
    else
          return 1+factortime(n/p , p);
詳解 提供者:hchungw
要計算正整數 n 含有質數 p 的因數次數,我們可以通過遞迴地除以 p 來實現。如果 n 可以被 p 整除,我們將 n 除以 p 並將次數加一,然後繼續遞迴處理結果;如果 n 不能被 p 整除,我們將次數返回為0。這樣,我們可以計算出 n 被 p 整除的總次數。
以下是實現 FactorTimes 函數的 Java 程式碼:

public class PrimeFactorTimes {
    /**
     * 遞迴函數計算正整數 n 含有質數 p 的因數次數。
     *
     * @param n 目標正整數
     * @param p 質數
     * @return n 含有質數 p 的因數次數
     */
    public static int FactorTimes(int n, int p) {
        // 如果 n 能被 p 整除,則進入遞迴
        if (n % p == 0) {
            return 1 + FactorTimes(n / p, p);
        } else {
            // 如果 n 不能被 p 整除,返回0
            return 0;
        }
    }
    public static void main(String[] args) {
        System.out.println("FactorTimes(792, 2): " + FactorTimes(792, 2)); // 應該回覆 3
        System.out.println("FactorTimes(792, 3): " + FactorTimes(792, 3)); // 應該回覆 2
        System.out.println("FactorTimes(792, 5): " + FactorTimes(792, 5)); // 應該回覆 0
        System.out.println("FactorTimes(792, 11): " + FactorTimes(792, 11)); // 應該回覆 1
    }
}
這個實現首先檢查 n 是否能被 p 整除,如果能,則進入遞迴,除以 p 並將次數加一;如果不能,則返回0。這樣,通過遞迴函數,我們可以獲得 n 被 p 整除的總次數。