首页 > 其他分享 >快速对一个数进行质因数分解(预处理可降低为log复杂度)

快速对一个数进行质因数分解(预处理可降低为log复杂度)

时间:2022-11-14 22:00:57浏览次数:56  
标签:埃氏 因数分解 int 复杂度 primes 预处理 log

对一个数进行质因子分解的朴素做法是O(sqrt(n))的试除法

如果可以预处理出mindiv[i]数组,即每个数的最小质因子,则进行因式分解时,可以对数n,不断执行n/=mindiv[n],即可分解。

例题:https://ac.nowcoder.com/acm/contest/45670/E

题解:https://www.bilibili.com/video/BV1NP411c7TM/?p=4&spm_id_from=pageDriver&vd_source=75ae018f8d1181302d7ea76b60c928f4

模板:可以在埃氏筛法中直接记录:

int primes[N];
bool not_prime[N];
int cnt = 0;
void get_primes(int n)
{
    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]=i;}
        }

    }

}
View Code

原理:这种写法的埃氏筛法只会筛一次

标签:埃氏,因数分解,int,复杂度,primes,预处理,log
From: https://www.cnblogs.com/ydUESTC/p/16890597.html

相关文章