素因子分解

对于一组数,对每一个进行素因子分解,常用的做法是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);
		}
	}
}
posted @ 2018-09-23 16:54  __orange  阅读(2178)  评论(0编辑  收藏  举报