對於一組數,對每一個進行素因子分解,常用的做法是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);
}
}
}