題目描述: 給定正整數 n,每次操作可以將 n 替換為其所有質因數之和。重複此操作直到 n 不再改變,返回最終的 n。
解題思路: 直接模擬:每次將 n 分解質因數,計算質因數之和,用這個和替換 n。重複直到 n 不再改變(n 本身是質數時就停止了,因為質數的質因數之和就是自己)。
質因數分解:從 2 開始,嘗試整除 n,每次除盡後累加該質因數。處理完所有 <= sqrt(n) 的因數後,若 n > 1 則 n 本身是質因數。
時間複雜度:O(sqrt(n) * log n) — 每次質因數分解 O(sqrt(n)),最多重複 O(log n) 次(值每次至少減半或不變)
空間複雜度:O(1) — 只用常數空間
1. Loop: a. Factorize n: for each prime factor p, add p to sum (with multiplicity) b. If sum == n, return n (fixed point reached) c. Set n = sum 2. Factorization: try divisors from 2 to sqrt(n) - While d divides n: sum += d, n /= d - If n > 1 after loop: sum += n (remaining prime factor)
預計算質數表法:先用篩法建出小於 sqrt(n) 的質數表,分解時只嘗試質數。常數更小但 n <= 10^5 時差異不大。
最小質因數篩(SPF Sieve):預處理每個數的最小質因數。分解時直接查表除以最小質因數。適合需要大量分解的場景,單次分解 O(log n)。