莫比乌斯反演推式子

前置

根据莫比乌斯反演,我们有:

\[[gcd(i,j)=1]=\sum_{d|gcd(i,j)}\mu(d) \]

给定 \(n,m(n\leq m)\),求:

\[\sum_{i=1}^n \sum_{j=1}^m [\gcd(i,j)=1] \]

直接代换,有:

\[\sum_{i=1}^n \sum_{j=1}^n \sum_{d|\gcd(i,j)}\mu(d) \]

因为 \(d|\gcd(i,j)\),所以 \(d|i,d|j\)。我们改为枚举 \(d\)

\[\sum_{d=1}^n \lfloor \frac{n}{d} \rfloor \lfloor \frac{m}{d} \rfloor\mu(d) \]

至于这一步为何是正确的,我们可以考虑对于每个 \(d\) 计算其 \(\mu(d)\) 产生的贡献。

此时我们直接使用整除分块可获得 \(O(\sqrt n)\) 的好成绩。

为了简便起见,我们将这种枚举 \(d|\gcd(i,j)\) 的套路称为套路一

给定 \(n,m,k\),求:

\[\sum_{i=1}^n\sum_{j=1}^m[\gcd(i,j)=k] \]

我们不妨设 \(n\leq m\),避免分讨而不失一般性。

注意到如果 \(\gcd(i,j)=k\),那么 \(k|i,k|j\)。所以缩小枚举范围:

\[\sum_{i=1}^{\lfloor \frac{n}{k} \rfloor}\sum_{j=1}^{\lfloor \frac{m}{k} \rfloor}[\gcd(i,j)=1] \]

使用套路一,有:

\[\sum_{d=1}^{\lfloor \frac{n}{k} \rfloor}\mu(d)\lfloor \frac{n}{kd} \rfloor\lfloor \frac{m}{kd} \rfloor \]

直接使用整除分块,可获得 \(O(\sqrt n)\) 的好成绩。

我们把这种通过 \(\gcd(i,j)=k\) 推出 \(k|i,k|j\) 进而缩小枚举范围且转变为 \(\gcd(i,j)=1\) 的套路称为套路二

给定 \(n,m\),求:

\[\sum_{i=1}^n \sum_{j=1}^m \gcd(i,j) \]

不妨设 \(n\leq m\)

\(d=\gcd(i,j)\),使用套路二,有:

\[\sum_{d=1}^n\sum_{i=1}^{\lfloor \frac{n}{d} \rfloor}\sum_{j=1}^{\lfloor \frac{m}{d} \rfloor} [\gcd(i,j)=1]d \]

使用套路一,有:

\[\sum_{d=1}^n \sum_{k=1}^{\lfloor \frac{n}{d} \rfloor}d\mu(k)\lfloor \frac{n}{kd} \rfloor\lfloor \frac{m}{kd} \rfloor \]

使用两次整除分块,即可获得 \(O(n)\) 的好成绩。

posted @   Linge_Zzzz  阅读(7)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示