模板 欧拉筛法 分解质因数

const int maxn=32767;
int prime[50],isprime[maxn];

struct P_factor
{
    int p,k;
    P_factor()
    {
        p=k=0;
    }
    P_factor(int x,int y)
    {
        p=x;
        k=y;
    }
};
vector  divide_factor(int x)
{
    vector  R;
    R.clear();
    for(int i=1;i<=prime[0];i++)
    {
        int p=prime[i];
        if(p*p>x)
            break;
        if(x%p==0)
        {
            int k=0;
            while(x%p==0)
            {
                x/=p;
                k++;
            }
            R.push_back(P_factor(p,k));
        }
    }
    if(x>1)
        R.push_back(P_factor(x,1));
    return R;
}

void Prepare_Prime(void)
{
    memset(isprime,1,sizeof(isprime));
    isprime[1]=0;
    prime[0]=0;
    for(int i=2;i=maxn)
                break;
            isprime[i*prime[j]]=0;
            if(i%prime[j]==0)
                break;
        }
    }
}

然后是vector 的取出

 vector  ANS=divide_factor(x);
        if(t!=0)
            printf("\n");
        t++;
        while(!ANS.empty())
        {
            P_factor temp=ANS.back();
            ANS.pop_back();
            printf("%d %d ",temp.p,temp.k);
        }


你可能感兴趣的:(模板,数论)