素因子分解


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