快速对一个数进行质因数分解(预处理可降低为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]);}
        }

    }

}
View Code
复制代码

 

posted @   80k  阅读(271)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示