杜教筛&套路总结
Posted emiya-wjk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了杜教筛&套路总结相关的知识,希望对你有一定的参考价值。
杜教筛
[ egin{split} (g*f)(i)&=sum_{d|i}g(d)f(frac id)\\Rightarrow g(1)S(n)&=sum_{i=1}^n(g*f)(i)-sum_{i=2}^ng(i)S(frac ni) end{split} ]
其中,(S(x))为(f())的前缀和。
套路一:(mu)
由((1*mu)=e),取(g(x)=1)。
[
egin{split}
S(n)=1-sum_{i=2}^nS(frac ni)
end{split}
]
可以用线性筛预处理一部分(mu)的前缀和,剩下的用杜教筛记忆化搜索即可。
int Smu(int x){
if(x<=M)return mu[x];
if(smu[x])return smu[x];
int ret=1;
for(int l=2,r=0;r!=x;l=r+1){
r=x/(x/l);
ret-=1ll*(r-l+1)*Smu(x/l);
}
return smu[x]=ret;
}
例题
套路2:(varphi)
由((1*varphi)=Id),取(g(x)=1)。
[
S(n)=frac {n cdot (n+1)}2-sum_{i=2}^nS(frac ni)
]
LL Sphi(int x){
if(x<=M)return phi[x];
if(sphi[x])return sphi[x];
LL ret=1ll*x*(1ll*x+1)/2;
for(int l=2,r=0;r!=x;l=r+1){
r=x/(x/l);
ret-=1ll*(r-l+1)*Sphi(x/l);
}
return sphi[x]=ret;
}
例题
以上是关于杜教筛&套路总结的主要内容,如果未能解决你的问题,请参考以下文章