這樣的任務可以通過對給定數字進行質因數分解來實現。下面提供兩種實現方式:一種使用 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,則使用 '^' 符號來表示次方。