zoukankan      html  css  js  c++  java
  • 线性筛分解质因子

    线性筛分解质因子

    今天多校有道题要分解质因子,以前单纯用线性筛找最小质因子放进一个vector里来算会t地不要不要的,队友用前向星存才过。
    回来想了一下,既然线性筛能找到这个数的最小质因子,那么p^k*x直接指向x不就可以了么。
    这种做法时间复杂度O(n),空间O(n)
    前向星遍历时按质因子从小到大遍历,从head[x]开始,遍历到-1结束

    我的模版

    struct fact{
        int p,num,next;
        fact(){};
        fact(int p_,int num_,int next_):p(p_),num(num_),next(next_){};
    }factor[maxn];
    int head[maxn];
    int prime[maxn];
    bool mark[maxn];
    int getfact(int N)
    {
        memset(mark,0,N*sizeof(bool));
        int tot=0,cnt=0,i,j;
        mark[0]=mark[1]=1;
        head[1]=-1;
        for(i=2;i<=N;i++)
        {
            if(!mark[i]){
                prime[tot++]=i;
                factor[cnt]=fact(i,1,-1);
                head[i]=cnt++;
                }
            for(j=0;j<tot&&i*prime[j]<=N;j++){
                mark[i*prime[j]]=1;
                if(!(i%prime[j]))
                {
                    factor[cnt]=fact(prime[j],1+factor[head[i]].num,factor[head[i]].next);
                    head[i*prime[j]]=cnt++;
                    break;
                }
                else
                {
                    factor[cnt]=fact(prime[j],1,head[i]);
                    head[i*prime[j]]=cnt++;
                }
            }
        }
        factor[cnt]=fact(1,1,-1);
        head[1]=cnt++;
        return tot;
    }
    
  • 相关阅读:
    使用xfire
    db2 存储过程编写定义
    mac下使用eclipse的svn报错问题

    nsis打包过程
    mac快捷键以及增加桌面
    struts2 无法访问static目录下的内容的解决办法
    linux下安装db2
    ORACLE01034错误解决
    cannot restore segment prot after reloc: Permission denied
  • 原文地址:https://www.cnblogs.com/femsub/p/5754527.html
Copyright © 2011-2022 走看看