分解质因数顶级优化

用线性筛预处理出质数,然后用val存每个数的最小质数

void getp()
{
	for (int i = 2; i <= N;i++)
	{
		if(!st[i])
		{
			prime[cnt++] = i;
			val[i] = i;
		}
		for (int j = 0;prime[j]<=N/i;j++)
		{
			st[i * prime[j]] = 1;
			val[i*prime[j]]=prime[j];
			if(i%prime[j]==0)
				break;
		}
	}
}
int c = 0;
for(int i=1;i<=n;i++)
{
	int x=a[i];
	while(x>1)
	{
		int d=val[x];
		x/=d;
		if(f[d])c--;
		else c++;
		f[d] ^= 1;
	}
}
posted on 2025-07-25 11:39  下头小美  阅读(10)  评论(0)    收藏  举报