在C++中優化分解質因數的代碼可以使用試除法和埃氏篩法等算法來減少時間復雜度。以下是一個使用試除法優化的例子:
#include <iostream>
#include <vector>
void primeFactors(int n) {
// 輸出所有的 2
while (n % 2 == 0) {
std::cout << 2 << " ";
n = n / 2;
}
// n 現在一定是奇數,可以跳過偶數
for (int i = 3; i * i <= n; i = i + 2) {
// 輸出所有的 i
while (n % i == 0) {
std::cout << i << " ";
n = n / i;
}
}
// n 現在可能是一個大于 2 的素數
if (n > 2) {
std::cout << n << " ";
}
}
int main() {
int n = 315;
primeFactors(n);
return 0;
}
這個代碼使用試除法來分解質因數,首先判斷是否能被2整除,然后再循環判斷是否能被奇數整除。這樣可以減少不必要的循環次數,提高代碼的效率。
另外,也可以使用埃氏篩法來預處理質數表,然后使用質數表來進行分解質因數,這樣可以更快地找到質因數。