快速对一个数进行质因数分解(预处理可降低为log复杂度)
对一个数进行质因子分解的朴素做法是O(sqrt(n))的试除法
如果可以预处理出mindiv[i]数组,即每个数的最小质因子,则进行因式分解时,可以对数n,不断执行n/=mindiv[n],即可分解。
例题:https://ac.nowcoder.com/acm/contest/45670/E
(此例题中,min_div不取min,取任意一个质因子也可以)
题解:https://www.bilibili.com/video/BV1NP411c7TM/?p=4&spm_id_from=pageDriver&vd_source=75ae018f8d1181302d7ea76b60c928f4
模板:可以在埃氏筛法中直接记录:

int primes[N]; bool not_prime[N]; int min_div[N]; int cnt = 0; void get_primes(int n) { for (int i = 1; i < n; i++) { min_div[i]=i; } for (int i = 2; i < n; i++) { if (!not_prime[i]) { min_div[i]=i; primes[cnt++] = i; for (LL j = LL(i)*i; j <= n; j += i) {not_prime[j] = true;min_div[j]=min(i,min_div[j]);} } } }