[知识点]莫比乌斯反演模型进阶

哪来什么进阶QAQ,只不过是被虐得更惨了

总结了一下$lc$传授的套路与模型

一般来讲是求与$gcd$有关的。那么可以反演得到模型:

令$f(d)$为$1<=x<=n$,$1<=y<=m$且$gcd(x,y)=d$的数对$(x,y)$的个数

然后可以枚举$d$进行一波操作,然后再换个元,大概可以得到

$${\sum_{T=1}^n}{\lfloor \frac{n}{T} \rfloor}{\lfloor \frac{m}{T} \rfloor}g(x)$$

通过预处理出$g(x)$和前缀和,分块去计算答案,以达到单次询问$\sqrt{n}$

至于这个处理$g(x)$,我们通常用以下方法:

借鉴线性筛,分类操作

①$x$为质数时

②$i$与$p$互质时求$i*p$

③$i%p==0$时求$i*p$(此时$break$)

通常第三种情况我们需要使$i*p=i_1*p^y$,此时$i_1$与$p$互质,这样就可以转化为情况二去解决问题了

那么我们怎么求得$i_1$以及$y$呢?简单粗暴可以暴力去除,最坏复杂度是$O(logn)$

我们还可以$O(1)$去求:

对于每一个数,记录它的最小质因数$P[i]$、它的幂$K[i]$、还有$G[i*p]=P[i*p]^{K[i*p]}$

由于筛的时候每个数都会被它的最小质因数筛掉,所以在$break$之前,$p$为$i*p$的最小质因数

情况二的时候,$P[i*p]=p$,$K[i*p]=1$,$G[i*p]=p$

情况三的时候,由于$i*p$已经记录最小质因数$p$了,只需将$K[i*p]=K[i]+1$就好了,同时$G[i*p]=G[i]*p$

需要求情况三中的$y$和$i_1$的时候,$K$数组里就是$y$,可以$O(1)$求出$i_1=$$\frac{i*p}{G[i*p]}$ (撒花!!)

此类型题目:

[BZOJ 3529]数表

[BZOJ 3309]DZY Loves Math

[BZOJ 4407]于神之怒加强版

[BZOJ 2693]jzptab

posted @ 2017-12-10 19:03 Hallmeow 阅读(...) 评论(...) 编辑 收藏