阿摩線上測驗 登入

申論題資訊

試卷:112年 - 112 專技高考_資訊技師:程式設計#117598
科目:程式設計
年份:112年
排序:0

申論題內容

一、使用 C++ 或 Java 設計一個函式(function, method),傳入一個大於或等於 2 的整數,可以列出輸入之整數的質因數乘積。(20 分)
注意:符號 ^ 代表次方。
執行範例:
foo(13)輸出 13 = 1 * 13
foo(30)輸出 30 = 2 * 3 * 5
foo(675)輸出 675 = 3 ^ 3 * 5 ^ 2

詳解 (共 1 筆)

詳解 提供者:hchungw
這樣的任務可以通過對給定數字進行質因數分解來實現。下面提供兩種實現方式:一種使用 C++,另一種使用 Java。這兩種方法都利用了相同的邏輯——從最小的質數開始試除,並且當找到一個質因數時,繼續除以這個質因數,直到不能整除為止,然後繼續尋找下一個質因數。
C++ 實現
cpp
Copy code
#include <iostream>
#include <map>
void printPrimeFactors(int n) {
    std::map<int, int> factors;
    for (int div = 2; n > 1; ++div) {
        while (n % div == 0) {
            factors[div]++;
            n /= div;
        }
    }
    std::cout << n << " = ";
    for (auto it = factors.begin(); it != factors.end(); ) {
        std::cout << it->first;
        if (it->second > 1) {
            std::cout << " ^ " << it->second;
        }
        if (++it != factors.end()) {
            std::cout << " * ";
        }
    }
    std::cout << std::endl;
}
int main() {
    printPrimeFactors(13);
    printPrimeFactors(30);
    printPrimeFactors(675);
    return 0;
}
Java 實現
java
Copy code
import java.util.LinkedHashMap;
import java.util.Map;
public class PrimeFactors {
    public static void printPrimeFactors(int n) {
        Map<Integer, Integer> factors = new LinkedHashMap<>();
        for (int div = 2; n > 1; ++div) {
            while (n % div == 0) {
                factors.put(div, factors.getOrDefault(div, 0) + 1);
                n /= div;
            }
        }
        System.out.print(n + " = ");
        for (Map.Entry<Integer, Integer> entry : factors.entrySet()) {
            System.out.print(entry.getKey());
            if (entry.getValue() > 1) {
                System.out.print(" ^ " + entry.getValue());
            }
            if (!entry.equals(factors.entrySet().toArray()[factors.size() - 1])) {
                System.out.print(" * ");
            }
        }
        System.out.println();
    }
    public static void main(String[] args) {
        printPrimeFactors(13);
        printPrimeFactors(30);
        printPrimeFactors(675);
    }
}
請注意,在 C++ 和 Java 程式碼中,我們使用了 std::map 和 LinkedHashMap 來儲存質因數和它們的次數。這確保了質因數以升序被處理和輸出,並且允許我們記錄每個質因數的次數。在輸出階段,我們檢查每個質因數的次數,如果次數大於 1,則使用 '^' 符號來表示次方。