分解质因数顶级优化
用线性筛预处理出质数,然后用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;
}
}
浙公网安备 33010602011771号