素因子分解
对于一组数,对每一个进行素因子分解,常用的做法是O(n*sqrt(N))的。但实际上还有一种O(N*loglogN+n*logN)的做法。埃氏筛处理出每个数的最小质因子,然后对每个数的分解就是logN级别的
int min_p[N+10],a[n+10];
vector<int> fac[n+10];
void init()
{
for (int i=2;i<=N;++i)
{
if (!min_p[i])
{
for (int j=i;j<=N;j+=i)
{
if (!min_p[j])
min_p[j]=i;
}
}
}
}
int main()
{
for (int i=0;i<n;++i)
{
int x=a[i];
while (x>1)
{
int p=min_p[x];
while (x%p==0)
x/=p;
fac[i].pb(p);
}
}
}