素因子分解


对于一组数,对每一个进行素因子分解,常用的做法是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);
		}
	}
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM