数论分块与莫比乌斯反演

数论分块

  • 又称整除分块。

  • 考虑求 \(\sum\limits_{i=1}^n \lfloor\frac{n}{i}\rfloor\)

引理:\(\forall a,b,c\in \mathbb{Z},\lfloor\frac{a}{bc}\rfloor=\lfloor\dfrac{\lfloor\frac{a}{b}\rfloor}{c}\rfloor\)

  • 不妨设 \(\frac{a}{b}=k+r\),其中 \(k\in \mathbb{Z},r\in [0,1)\),于是

\[\begin{aligned} \lfloor\frac{a}{bc}\rfloor & =\lfloor\frac{1}{c}\times \frac{a}{b}\rfloor \\ & =\lfloor\frac{k}{c}+\frac{r}{c}\rfloor \\ \end{aligned} \]

  • 这里我们设 \(k=k'c+r'\),其中 \(k',r'\in \mathbb{Z}\),且 \(r'\in [0,c)\),于是

\[\begin{aligned} \lfloor\frac{a}{bc}\rfloor & =\lfloor\frac{k}{c}+\frac{r}{c}\rfloor \\ & =\lfloor k'+(r'+\frac{r}{c})\rfloor \end{aligned} \]

  • 注意到 \(r'<c\to c-r'\geqslant 1\),但 \(r<1\to \frac{r}{c}<1\),所以 \(r'+\frac{r}{c}<1\),于是

\[\begin{aligned} \lfloor\frac{a}{bc}\rfloor & =k' \\ & =\lfloor\frac{\lfloor\frac{a}{b}\rfloor}{c}\rfloor \end{aligned} \]

  • 证毕。

定理 1:\(\lfloor\frac{n}{i}\rfloor\) 只有 \(O(\sqrt{n})\) 种不同取值。

  • \(sq=\lceil\sqrt{n}\rceil\)

  • \(\forall i\leqslant sq\)\(i\) 只有 \(O(\sqrt{n})\) 种,显然 \(\lfloor\frac{n}{i}\rfloor\) 也只有 \(O(\sqrt{n})\) 种。

  • \(\forall i>sq\)\(\lfloor\frac{n}{i}\rfloor\leqslant sq\),于是 \(\lfloor\frac{n}{i}\rfloor\) 还是只有 \(O(\sqrt{n})\) 种。

  • \(\lfloor\frac{n}{i}\rfloor\) 只有 \(O(\sqrt{n})\) 种取值,表现大概是这样

定理 2:\(\forall \lfloor\frac{n}{j}\rfloor=\lfloor\frac{n}{i}\rfloor,j_{\max}=\lfloor\dfrac{n}{\lfloor\frac{n}{i}\rfloor}\rfloor\)

  • 不妨设 \(n=ki+r\),即 \(k=\lfloor\frac{n}{i}\rfloor\),于是有

\[k\leqslant \frac{n}{i}\to \lfloor\frac{n}{k}\rfloor \geqslant \lfloor\frac{n}{\frac{n}{i}}\rfloor=\lfloor i\rfloor=i \]

  • 换言之,\(\forall \lfloor\frac{n}{j}\rfloor=\lfloor\frac{n}{i}\rfloor,\lfloor\frac{n}{k}\rfloor \geqslant j\),故 \(\lfloor\frac{n}{k}\rfloor=\lfloor\dfrac{n}{\lfloor\frac{n}{i}\rfloor}\rfloor=j_{\max}\)

  • 当然我们还要证明 \(\lfloor\frac{n}{k}\rfloor\) 是一个合法的 \(j\),即 \(\lfloor\dfrac{n}{\lfloor\frac{n}{k}\rfloor}\rfloor=\lfloor\frac{n}{i}\rfloor\)

  • 将式子展开,得到

\[\lfloor\dfrac{n}{\lfloor\frac{n}{\lfloor\frac{n}{i}\rfloor}\rfloor}\rfloor=\lfloor\frac{n}{i}\rfloor \]

  • 考虑拆掉最里层的 \(\lfloor\rfloor\),发现 \(\lfloor\frac{n}{\lfloor\frac{n}{i}\rfloor}\rfloor\to \lfloor\frac{n}{\frac{n}{i}}\rfloor=\lfloor i \rfloor=i\) 是变小了,分母变小整体变大,故有

\[\lfloor\dfrac{n}{\lfloor\frac{n}{\lfloor\frac{n}{i}\rfloor}\rfloor}\rfloor\leqslant \lfloor\frac{n}{i}\rfloor \]

  • 考虑拆掉中间层的 \(\lfloor\rfloor\),发现分母变大整体变小,式子变为

\[\lfloor\dfrac{n}{\frac{n}{\lfloor\frac{n}{i}\rfloor}}\rfloor=\lfloor\lfloor\frac{n}{i}\rfloor\rfloor=\lfloor\frac{n}{i}\rfloor \]

  • 就是说,有

\[\lfloor\dfrac{n}{\lfloor\frac{n}{\lfloor\frac{n}{i}\rfloor}\rfloor}\rfloor\geqslant \lfloor\frac{n}{i}\rfloor \]

  • 联立,得到

\[\lfloor\dfrac{n}{\lfloor\frac{n}{\lfloor\frac{n}{i}\rfloor}\rfloor}\rfloor=\lfloor\frac{n}{i}\rfloor \]

  • 所以 \(\lfloor\dfrac{n}{\lfloor\frac{n}{i}\rfloor}\rfloor\) 既是最大的,又是合法的,所以它是段 \(\lfloor\frac{n}{i}\rfloor\) 的右端点。

  • 总之,整除分块可以用来快速求和。其也可以推广到多维,即 \(\sum\limits_{i=1}^{\min_{j=1}^{m} n_j} \prod\limits_{j=1}^m \lfloor\dfrac{n_j}{i}\rfloor\)

  • 可以发现此时不同的 \(\prod\) 值只有 \(O(\sqrt{n}m)\) 种,因为对于左边界 \(l\),右边界为 \(\min_{j=1}^m \lfloor\dfrac{n_j}{\lfloor\frac{n_j}{l}\rfloor}\rfloor\),表现大概是这样:

P1403 [AHOI2005] 约数研究/P3935 Calculating

  • 题意:求 \(\sum\limits_{i=1}^n d(i)\)

  • 数据范围:\(n\leqslant 10^6/10^{14}\)

  • 显然可以线性筛/杜教筛,但用一点基础的交换和式知识(也可以认为是莫反),可以将式子化为 \(\sum\limits_{d=1}^n \lfloor\frac{n}{i}\rfloor\)

  • 于是整除分块即可,\(O(\sqrt{n})\)

P2261 [CQOI2007] 余数求和

  • 题意:求 \(\sum\limits_{i=1}^n m\bmod i\)

  • 数据范围:\(n,m\leqslant 10^9\)

  • 考虑拆 \(\bmod\),将之变为 \(m-i\lfloor\frac{m}{i}\rfloor\)。显然前项易得,问题变成求 \(\sum\limits_{i=1}^n i\lfloor\frac{m}{i}\rfloor\)

  • 显然这可以直接整除分块,对取值相同的 \(\lfloor\frac{m}{i}\rfloor\),求区间 \(i\) 和即可。复杂度 \(O(\sqrt{n})\)

P2260 [清华集训2012] 模积和

  • 题意:求 \(\sum\limits_{i=1}^n \sum\limits_{j=1}^m (n\bmod i)(m\bmod j)[i\neq j] \pmod{19940417}\)。应当指出,\(19940417=7\times 2848631\),故逆元存在性需要考量。

  • 数据范围:\(n,m\leqslant 10^9\)

  • 首先注意到 \([i\neq j]\) 很烦,考虑把这部分的贡献算出来减掉,即

\[\sum\limits_{i=1}^n \sum\limits_{j=1}^m (n\bmod i)(m\bmod j)[i\neq j]=\sum\limits_{i=1}^n \sum\limits_{j=1}^m (n\bmod i)(m\bmod j)-\sum\limits_{i=1}^{\min(n,m)} (n\bmod i)(m\bmod i) \]

  • 先考虑前项:

\[\begin{aligned} res & =\sum\limits_{i=1}^n \sum\limits_{j=1}^m (n\bmod i)(m\bmod j) \\ & =\sum\limits_{i=1}^n \sum\limits_{j=1}^m (n-i\lfloor\frac{n}{i}\rfloor)(m-j\lfloor\frac{m}{j}\rfloor) \\ & =\sum\limits_{i=1}^n \sum\limits_{j=1}^m (nm-nj\lfloor\frac{m}{j}\rfloor-mi\lfloor\frac{n}{i}\rfloor+ij\lfloor\frac{n}{i}\rfloor\lfloor\frac{m}{j}\rfloor) \end{aligned} \]

  • 前三项都是显然的,考虑最后一项:

\[\begin{aligned} res & =\sum\limits_{i=1}^n \sum\limits_{j=1}^m ij\lfloor\frac{n}{i}\rfloor\lfloor\frac{m}{j}\rfloor \\ & =\sum\limits_{i=1}^n i\lfloor\frac{n}{i}\rfloor \sum\limits_{j=1}^m j\lfloor\frac{m}{j}\rfloor \\ & =(\sum\limits_{i=1}^n i\lfloor\frac{n}{i}\rfloor) (\sum\limits_{j=1}^m j\lfloor\frac{m}{j}\rfloor) \end{aligned} \]

  • 考虑后项:

\[\begin{aligned} res & =\sum\limits_{i=1}^{\min(n,m)} (n\bmod i)(m\bmod i) \\ & =\sum\limits_{i=1}^{\min(n,m)} (n-i\lfloor\frac{n}{i}\rfloor)(m-i\lfloor\frac{m}{i}\rfloor) \\ & =\sum\limits_{i=1}^{\min(n,m)} (nm-ni\lfloor\frac{m}{i}\rfloor-mi\lfloor\frac{n}{i}\rfloor+i^2\lfloor\frac{n}{i}\rfloor\lfloor\frac{m}{i}\rfloor) \end{aligned} \]

  • 前三项都是显然的,最后一项即我们上面说的“二维整除分块”。

  • 综上,复杂度 \(O(\sqrt{n})\)

莫比乌斯反演

  • 考虑狄利克雷前缀和的式子,\(g(n)=\sum\limits_{d\mid n} f(d)\)

  • \(f\)\(g\) 是 naive 的;知 \(g\)\(f\) 呢?

  • 首先上式等价于 \(g=f\ast I\),若我们有 \(inv_I\),则有 \(f=g\ast inv_I\)

  • \(inv_I\),得到 \(\mu\),于是 \(f=g\ast \mu\),即 \(f(n)=\sum\limits_{d\mid n} \mu(d)g(\frac{n}{d})\)

  • 该式称为莫比乌斯反演,即对积卷积过程的反演。事实上,我们称 \(g\)\(f\) 的莫比乌斯变换,\(f\)\(g\) 的莫比乌斯逆变换(反演)。

  • 特别地,当 \(g=id,f=\varphi\),也称为欧拉反演。欧拉反演的应用比较狭窄,但有时比 \(\mu\ast I=\epsilon\) 的方法要简洁有力得多。

  • 所谓反演,就是已知 \(f,g\) 的某种关系,通常是容易 \(f\to g\) 的,要求逆向求出 \(f\) 关于 \(g\) 的表达式。

  • “反演的本质是将逻辑表达式改换成代数式,从而使其可以参与代数运算,为化式子提供机会”,这是我的某个前辈对反演的评价。

  • 在莫反中,其的表现主要是将 \(\sum\limits_d\) 交换到前面,于是原本在前的和式变成了。(以 \(\sum\limits_{i=1}^n f(i)\sum\limits_{d\mid i}\) 为例)形如 \(\sum\limits_{i=kd}^nf(i)\) 也即只在 \(d\) 的倍数处求和的和式,于是可以和整除分块相结合或者便于进一步化式子。

  • 出于整个博客的结构考虑,把需要亚线性筛的放在筛法那边了。

P1447 [NOI2010] 能量采集

  • 题意略。“太经典了,我每年都要讲”。

  • 手推+感性理解,很快发现 \((i,j)\) 是对应直线上的第 \(gcd(i,j)\) 个,造成 \(2gcd(i,j)-1\) 的能量损失。

  • 于是所求的答案可以做如下转换,这里认为 \(n\leqslant m\)

\[\begin{aligned} res & =\sum\limits_{i=1}^n \sum\limits_{j=1}^m gcd(i,j)\\ & =\sum\limits_{d=1}^n d \sum\limits_{i=1}^n \sum\limits_{j=1}^m [gcd(i,j)=d] \\ & =\sum\limits_{d=1}^n d \sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor} \sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor} [gcd(i,j)=1] \\ \end{aligned} \]

  • 若我们能快速求得 \(res\),则 \(ans=2res-nm\)

  • 然后有一个经典的容斥:记 \(f(d)=\sum\limits_{i=1}^n \sum\limits_{j=1}^m [gcd(i,j)=d]\)\(g(d)=\sum\limits_{i=1}^n \sum\limits_{j=1}^m [d\mid gcd(i,j)]\),我们有

\[f(d)=g(d)-\sum\limits_{kd\leqslant n}f(kd) \]

  • 显然 \(g\) 可以 \(O(n)\) 地求得,但求 \(f\) 的过程是 \(O(n\ln n)\) 的。过原题够了,但若 \(n,m\leqslant 10^7\) 呢?

  • 这个容斥式子没啥希望了,它的形态就不优美,\(kd\)...我们转而考虑狄利克雷卷积和莫比乌斯反演。接着上面的式子推,我们有

\[\begin{aligned} res & =\sum\limits_{d=1}^n d \sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor} \sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor} [gcd(i,j)=1] \\ & =\sum\limits_{d=1}^n d \sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor} \sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor} \epsilon(gcd(i,j)) \\ & =\sum\limits_{d=1}^n d \sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor} \sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor} (\mu\ast I)(gcd(i,j)) \\ & =\sum\limits_{d=1}^n d \sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor} \sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor} \sum\limits_{t\mid gcd(i,j)} \mu(t) \\ & =\sum\limits_{d=1}^n d \sum\limits_{t=1}^{\lfloor\frac{n}{d}\rfloor} \mu(t) \sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor} [t\mid i] \sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor} [t\mid j] \\ & =\sum\limits_{d=1}^n d \sum\limits_{t=1}^{\lfloor\frac{n}{d}\rfloor} \mu(t) \lfloor\frac{n}{td}\rfloor \lfloor\frac{m}{td}\rfloor \\ \end{aligned} \]

  • 事实上,到这一步,我们已经可以 \(O(n)\) 地求出答案了。对内部式子使用整除分块,乍一看复杂度是 \(O(n\sqrt{n})\),实际上复杂度应为 \(\sum\limits_{d=1}^n \sqrt{\lfloor\frac{n}{d}\rfloor}\),可以积分分析到 \(O(n)\)

  • 考虑多测,\(T\leqslant 10^5\)。那就继续化!发现这里我们每次都要重新整除分块,设法把这部分提出来。

\[\begin{aligned} res & =\sum\limits_{d=1}^n d \sum\limits_{t=1}^{\lfloor\frac{n}{d}\rfloor} \mu(t) \lfloor\frac{n}{td}\rfloor \lfloor\frac{m}{td}\rfloor \\ & =\sum\limits_{td=1}^n \lfloor\frac{n}{td}\rfloor \lfloor\frac{m}{td}\rfloor \sum\limits_{d\mid td} d\mu(\frac{td}{d}) \\ & =\sum\limits_{td=1}^n \lfloor\frac{n}{td}\rfloor \lfloor\frac{m}{td}\rfloor (id\ast\mu)(td) \\ & =\sum\limits_{td=1}^n \varphi(td)\lfloor\frac{n}{td}\rfloor \lfloor\frac{m}{td}\rfloor \end{aligned} \]

  • 线性筛 \(\varphi\) 的前缀和,然后整除分块,复杂度 \(O(n+T\sqrt{n})\)

  • 事实上,我们可以使用欧拉反演:

\[\begin{aligned} res & =\sum\limits_{i=1}^n \sum\limits_{j=1}^m (i,j) \\ & =\sum\limits_{i=1}^n \sum\limits_{j=1}^m id((i,j)) \\ & =\sum\limits_{i=1}^n \sum\limits_{j=1}^m (\varphi\ast I)((i,j)) \\ & =\sum\limits_{i=1}^n \sum\limits_{j=1}^m \sum\limits_{d\mid i\And d\mid j} \varphi(d) \\ & =\sum\limits_{d=1}^n \varphi(d)\lfloor\frac{n}{d}\rfloor \lfloor\frac{m}{d}\rfloor \end{aligned} \]

  • 简洁有力...不要忘记尝试欧拉反演。

P2257 YY 的 GCD

  • 题意略。非常反套路的一道题...

  • 模仿上题可以化出一个最终形式(认为 \(n\leqslant m\)):

\[res=\sum\limits_{pd=1}^n \lfloor\frac{n}{pd}\rfloor \lfloor\frac{m}{pd}\rfloor \sum\limits_{p\mid pd} \mu(d) \]

  • 其实这里我化错了一次,注意是 \(\mu(d)\) 而非 \(\mu(p)\)。显然主要问题就在于最后这个和式,它不传统。

  • 解决办法:暴力预处理!模仿埃氏筛,枚举 \(p\),对 \(pd\) 处加上 \(\mu(\frac{pd}{p})\)。也可以说是关于 \(p\) 反演(算贡献)吧,于是我们有 \(O(n\log\log)-O(\sqrt{n})\) 的优越复杂度。

P3312 [SDOI2014] 数表

  • 题意:多测,求 \(\sum\limits_{i=1}^n \sum\limits_{j=1}^m [\sigma_0(gcd(i,j))\leqslant x]\times \sigma_0(gcd(i,j))\)

  • 首先我们把 \(\sigma_0\) 筛出来,然后化式子,还是认为 \(n\leqslant m\)

\[res=\sum\limits_{d=1}^n \sigma_0(d)\times [\sigma_0(d)\leqslant a] \sum\limits_{i=1}^n \sum\limits_{j=1}^m [gcd(i,j)=d] \]

  • 很套路地卷一个 \(\epsilon\),快进到

\[res=\sum\limits_{td=1}^n \lfloor\frac{n}{td}\rfloor \lfloor\frac{m}{td}\rfloor \sum\limits_{d\mid td} \sigma_0(d)[\sigma_0(d)\leqslant a]\mu(\frac{td}{d}) \]

  • 发现这里化不下去,\(d=id\) 的美妙性质在这里没有了,还有一个恶心的逻辑表达式。

  • 考虑将所有数字按 \(\sigma_0\) 排序,定义一个函数

\[f(td)=\sum\limits_{d\mid td} \sigma_0(d)[\sigma_0(d)\leqslant a]\mu(\frac{td}{d}) \]

  • 问题变成求 \(f\) 的前缀和,考虑离线询问(我们做一个贡献法),按 \(a\) 升序排序,每次让 \(d\) 对所有 \(f(td)\) 贡献。

  • 既然 \(d\) 只会被扫到一次,那么此部分的总复杂度应为 \(O(n\ln n)\)\(\mu\) 可以线筛预处理,此时问题变成有多组询问,求

\[\sum\limits_{td=1}^n f(td)\lfloor\frac{n}{td}\rfloor \lfloor\frac{m}{td}\rfloor \]

  • 那么这就是一个很板的整除分块了。注意到 \(f\) 需要单点修改和区间查询,考虑使用树状数组维护之,于是总复杂度为 \(O(n\log^2+q\sqrt{n}\log)\),两部分分别是修改和查询的复杂度。

P2522 [HAOI2011] Problem b

  • 题意:求 \(\sum\limits_{i=a}^b \sum\limits_{j=c}^d [gcd(i,j)=d]\),多测。

  • 首先我们做一个二维差分,所求变成:

\[res(n,m)=\sum\limits_{i=1}^n \sum\limits_{j=1}^m [gcd(i,j)=d] \]

  • \(\epsilon\),快进:

\[res(n,m)=\sum\limits_{t=1}^{\lfloor\frac{n}{d}\rfloor} \mu(t) \lfloor\frac{n}{td}\rfloor \lfloor\frac{m}{td}\rfloor \]

  • 整除分块之,\(O(n+T\sqrt{n})\)

  • 显然这两道题上欧拉反演都无用武之地,可见欧拉反演虽然简洁,却也局限,应用范围非常狭窄。

P2424 约数和

  • 题意:求 \(\sum\limits_{i=l}^r \sigma_0(i)\)

  • 数据范围:\(l,r\leqslant 2\times 10^9\)

  • 首先容易想到 \(\sigma_0=I\ast id\to \sigma_0\ast \mu=id\),于是可以杜。

  • 但本题只有单组询问,我们考虑直接莫反:

\[\begin{aligned} S\sigma_0(n) & =\sum\limits_{i=1}^n \sum\limits_{d\mid i} id(d) \\ & =\sum\limits_{d=1}^n id(d)\lfloor\frac{n}{d}\rfloor \end{aligned} \]

  • 结束,\(O(\sqrt{n})\)

P3327 [SDOI2015] 约数个数和

  • 题意:求 \(\sum\limits_{i=1}^n \sum\limits_{j=1}^m d(ij)\)

  • 数据范围:\(T,n,m\leqslant 5\times 10^4\)

  • 唔,数据范围看起来就很数论分块。这个式子不是非常传统,因为它居然是 \(i\times j\),不过也正合适,我们直接拆 \(d\)

\[\begin{aligned} res & =\sum\limits_{i=1}^n \sum\limits_{j=1}^m d(ij) \\ & =\sum\limits_{i=1}^n \sum\limits_{j=1}^m (I\ast I)(ij) \\ & =\sum\limits_{i=1}^n \sum\limits_{j=1}^m \sum\limits_{d\mid ij} 1\\ & =\sum\limits_{d=1}^{nm} \sum\limits_{i\in [1,n] \And j\in [1,m]} [d\mid ij] \end{aligned} \]

  • ...推不下去。事实上,本题有一个关键结论:

\[d(ij)=\sum\limits_{x\mid i} \sum\limits_{y\mid j} [\gcd(x,y)=1] \]

posted @ 2023-01-07 08:56  未欣  阅读(26)  评论(0编辑  收藏  举报