设 f(x)=d∣x∑μ(d)μ(dx)。
这个函数显然是积性函数,但是对于线性筛求解方法,我查到了一种,大概长这样:
REP(i,2,N-1) {
if (!vis[i]) p[++cnt]=i,mu[i]=-1,mu2[i]=-2;
for (int j=1,t; j<=cnt&&i*p[j]<N; ++j) {
vis[t=i*p[j]] = 1;
if (i%p[j]==0) {
mu[t] = 0;
if (i/p[j]%p[j]==0) mu2[t] = 0;
else mu2[t] = 1;
break;
}
mu[t] = -mu[i];
mu2[t] = -2*mu2[i];
}
}
其中 mu 是莫比乌斯函数, mu2 就是 f 函数。
我不明白对于 i%p[j]==0 的 if 语句里面为什么这样是对的。
我可以理解 if (i/p[j]%p[j]==0) mu2[t] = 0;,但为什么如果 p[j] 没有出现超过两次,那么 mu2[t]=1?