杜教筛&套路总结

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;
} 

例题

【CQOI2015】选数

【BZOJ3944】Sum

套路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;
} 

例题

【BZOJ4805】欧拉函数求和

【BZOJ3944】Sum

以上是关于杜教筛&套路总结的主要内容,如果未能解决你的问题,请参考以下文章

数论学习笔记2之杜教筛初探(含例题练习)

51nod-1239&1244欧拉函数之和&莫比乌斯函数之和 杜教筛

莫比乌斯反演 and 杜教筛总结

杜教筛

杜教筛

狄利克雷卷积&&杜教筛&&莫比乌斯反演