莫比乌斯反演 学习笔记

炫酷反演魔术!

题目难度可能不严格递增,因为是乱着做的。

一些可能会用到的定理:

  • 欧拉函数的狄利克雷卷积

\[\varphi*Id_0=Id_1 \]

或者是另外一个形式:

\[\sum\limits_{d|n}\varphi(d)=n \]

\(n=\prod\limits_{i=1}^kp_i^{e_i}\)。因为 \(\varphi\) 是积性函数,所以上式等价于证明 \(\prod\limits_{i=1}^k\left(\sum\limits_{j=0}^{e_i}\varphi(p_i^j)\right)=n\)。根据欧拉函数的定义简单推一下可以得到 \(\sum\limits_{j=0}^{e_i}\varphi(p_i^j)=p_i^{e_i}\),故原式成立。

  • 莫比乌斯函数的狄利克雷卷积

\[\mu*Id_0=\varepsilon \]

或者是另外一个形式:

\[\sum\limits_{d|n}\mu(d)=\varepsilon(n) \]

\(n=\prod\limits_{i=1}^kp_i^{e_i}\)。因为 \(\mu\) 是积性函数,所以上式等价于证明 \(\prod\limits_{i=1}^k\left(\sum\limits_{j=0}^{e_i}\mu(p_i^j)\right)=\varepsilon(n)\)。根据莫比乌斯函数的定义简单推一下可以得到在 \(e_i\ge 1\)\(\sum\limits_{j=0}^{e_i}\varphi(p_i^j)=0\),在 \(e_i=0\)\(\sum\limits_{j=0}^{e_i}\varphi(p_i^j)=1\),故上式为 1 当且仅当 \(n=1\),故原式成立。

  • 另一个关于欧拉函数和莫比乌斯函数的性质

因为我们已经知道 \(\varphi*Id_0=Id_1\)\(\mu*Id_0=\varepsilon\),所以显然有 \(\mu*Id_1=\varphi\)

  • 约数函数的性质

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

首先令 \(n=p^a,m=p^b\)。此时等式两边显然成立。注意此时 \(a,b\) 可以为 0。

再拓展到更一般的形式。把 \(n,m\) 分解质因数,此时要满足 \(\gcd(i,j)=1\) 则每个素数都要是合法情况。所以两两不影响,乘起来还是合法的。

P2260 [清华集训2012] 模积和

其实就是整除分块练手题。先不管 \(i\neq j\) 的限制,最后再减去即可。

注意 19940417 并不是质数,但是它与 2,6 互质,可以求逆元。

P3455 [POI2007]ZAP-Queries/P4450 双亲数/UVA12888 Count LCM

中间那道是削弱版,没有多测。最后那道是 \(k=1\)

很基础的一道题。令 \(a\le b\),考虑 \(k=1\) 的情况。

\[\begin{aligned} ans&=\sum\limits_{i=1}^a\sum\limits_{j=1}^b[\gcd(i,j)=1]\\ &=\sum\limits_{i=1}^a\sum\limits_{j=1}^b\varepsilon(\gcd(i,j))\\ &=\sum\limits_{i=1}^a\sum\limits_{j=1}^b\sum\limits_{d|\gcd(i,j)}\mu(d)\\ &=\sum\limits_{d=1}^a\mu(d)\sum\limits_{d|a}\sum\limits_{d|b}1\\ &=\sum\limits_{d=1}^a\mu(d)\lfloor\dfrac{a}{d}\rfloor\lfloor\dfrac{b}{d}\rfloor\\ \end{aligned} \]

线性筛预处理 \(\mu(n)\) 前缀和,整除分块即可。那么 \(k>1\) 呢?直接 \(a\gets\lfloor\dfrac{a}{k}\rfloor\)\(b\gets\lfloor\dfrac{b}{k}\rfloor\) 即可。

P2522 [HAOI2011]Problem b

容斥以后就跟上面是一样的了。

AcWing221. 龙哥的问题/CCPC2017杭州 B. Master of Phi

显然上式等于 \(\sum\limits_{d|n}d\times\varphi(\dfrac{n}{d})\)。因为 \(\varphi(n)\) 是积性函数,所以对于 \(n=\prod\limits_{i=1}^kp_i^{e_i}\),有上式等于 \(\prod\limits_{i=1}^k\sum\limits_{j=0}^{e_i}p_i^j\times\varphi(p_i^{e_i-j})\)。对于 \(e_i-j>0\),容易发现 \(p_i^j\times\varphi(p_i^{e_i-j})\) 始终为 \((p_i-1)p_i^{e_i-1}\)。所以上式等于 \(\prod\limits_{i=1}^ke_i(p_i-1)p_i^{e_i-1}+p_i^{e_i}\)

HDU1695 GCD

相当于求 \(\sum\limits_{i=1}^b\sum\limits_{j=i}^d[\gcd(i,j)=k]\),在 ZAP-Queries 的基础上减去 \(-[b\ge 1]+\sum\limits_{i=1}^b\varphi(i)\) 即可。

md,有 \(k=0\) 的情况,不特判会 RE。

P1829 [国家集训队]Crash的数字表格 / JZPTAB

\(n\le m\)

\[\begin{aligned} ans&=\sum\limits_{i=1}^n\sum\limits_{j=1}^m\text{lcm}(i,j)\\ &=\sum\limits_{i=1}^n\sum\limits_{j=1}^m\dfrac{ij}{\gcd(i,j)}\\ &=\sum\limits_{i=1}^n\sum\limits_{j=1}^m\sum\limits_{k|i,k|j,\gcd(\frac{i}{k},\frac{j}{k})=1}\dfrac{ij}{k}\\ &=\sum\limits_{k=1}^nk\sum\limits_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{k}\rfloor}ij\cdot [\gcd(i,j)=1]\\ &=\sum\limits_{k=1}^nk\sum\limits_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{k}\rfloor}ij\cdot \varepsilon(\gcd(i,j))\\ \end{aligned} \]

\(f(n,m)=\sum\limits_{i=1}^n\sum\limits_{j=1}^mij\cdot \varepsilon(\gcd(i,j))\)

\[\begin{aligned} f(n,m)&=\sum\limits_{i=1}^n\sum\limits_{j=1}^mij\cdot \varepsilon(\gcd(i,j))\\ &=\sum\limits_{i=1}^n\sum\limits_{j=1}^mij\sum\limits_{d|\gcd(i,j)}\mu(d)\\ &=\sum\limits_{d=1}^n\mu(d)\cdot d^2\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor}ij\\ &=\sum\limits_{d=1}^n\mu(d)\cdot d^2\dfrac{(\lfloor\frac{n}{d}\rfloor+1)\lfloor\frac{n}{d}\rfloor}{2}\cdot\dfrac{(\lfloor\frac{m}{d}\rfloor+1)\lfloor\frac{m}{d}\rfloor}{2}\\ \end{aligned} \]

\(f(n,m)\) 可以整除分块 \(\mathcal{O}(\sqrt{n}+\sqrt{m})\) 求,\(ans=\sum\limits_{k=1}^nk\cdot f(\lfloor\frac{n}{k}\rfloor,\lfloor\frac{m}{k}\rfloor)\) 也可以整除分块 \(\mathcal{O}(\sqrt{n}+\sqrt{m})\) 求,总的就是 \(\mathcal{O}(n)\)

\(f(n,m)\) 的时候注意因为 \(n,m\le10^7\)\(\dfrac{(\lfloor\frac{m}{d}\rfloor+1)\lfloor\frac{m}{d}\rfloor}{2}\) 先乘后除不会爆 long long,但如果直接乘上前面那部分再取模就会了,建议三项分别取模再一个个乘起来取模。


但是我们的时间复杂度就止步于线性了吗?

稍微加强一下题目:还是求一样的东西,但是多测,数据组数 \(T\le2000\)。怎么做?

把最终的式子写出来:

\[\begin{aligned} ans&=\sum\limits_{k=1}^nk\cdot f(\lfloor\frac{n}{k}\rfloor,\lfloor\frac{m}{k}\rfloor)\\ &=\sum\limits_{k=1}^nk\sum\limits_{d=1}^{\lfloor\frac{n}{k}\rfloor}\mu(d)\cdot d^2\dfrac{(\lfloor\frac{\lfloor\frac{n}{k}\rfloor}{d}\rfloor+1)\lfloor\frac{\lfloor\frac{n}{k}\rfloor}{d}\rfloor}{2}\cdot\dfrac{(\lfloor\frac{\lfloor\frac{m}{k}\rfloor}{d}\rfloor+1)\lfloor\frac{\lfloor\frac{m}{k}\rfloor}{d}\rfloor}{2}\\ &=\sum\limits_{k=1}^nk\sum\limits_{d=1}^{\lfloor\frac{n}{k}\rfloor}\mu(d)\cdot d^2\dfrac{(\lfloor\frac{n}{kd}\rfloor+1)\lfloor\frac{n}{kd}\rfloor}{2}\cdot\dfrac{(\lfloor\frac{m}{kd}\rfloor+1)\lfloor\frac{m}{kd}\rfloor}{2}\\ \end{aligned} \]

\(T=kd\)

\[\begin{aligned} ans&=\sum\limits_{k=1}^nk\sum\limits_{d=1}^{\lfloor\frac{n}{k}\rfloor}\mu(d)\cdot d^2\dfrac{(\lfloor\frac{n}{T}\rfloor+1)\lfloor\frac{n}{T}\rfloor}{2}\cdot\dfrac{(\lfloor\frac{m}{T}\rfloor+1)\lfloor\frac{m}{T}\rfloor}{2}\\ &=\sum\limits_{T=1}^n\dfrac{(\lfloor\frac{n}{T}\rfloor+1)\lfloor\frac{n}{T}\rfloor}{2}\cdot\dfrac{(\lfloor\frac{m}{T}\rfloor+1)\lfloor\frac{m}{T}\rfloor}{2}\sum\limits_{k|T}k\cdot \mu(\frac{T}{k})(\frac{T}{k})^2\\ &=\sum\limits_{T=1}^n\dfrac{(\lfloor\frac{n}{T}\rfloor+1)\lfloor\frac{n}{T}\rfloor}{2}\cdot\dfrac{(\lfloor\frac{m}{T}\rfloor+1)\lfloor\frac{m}{T}\rfloor}{2}\sum\limits_{d|T}\frac{T}{d}\cdot \mu(d)d^2\\ &=\sum\limits_{T=1}^n\dfrac{(\lfloor\frac{n}{T}\rfloor+1)\lfloor\frac{n}{T}\rfloor}{2}\cdot\dfrac{(\lfloor\frac{m}{T}\rfloor+1)\lfloor\frac{m}{T}\rfloor}{2}T\sum\limits_{d|T}\mu(d)d\\ \end{aligned} \]

把后面那坨单独拎出来,设 \(g(n)=\sum\limits_{d|n}\mu(d)d\)。设有互质整数 \(a,b\),因为 \(\mu(n),Id_1(n)\) 都是积性函数,所以 \(g(ab)=\sum\limits_{d|ab}\mu(d)d=\sum\limits_{d_1|a,d_2|b}(\mu(d_1)\mu(d_2))(d_1d_2)=\sum\limits_{d_1|a,d_2|b}(\mu(d_1)d_1)(\mu(d_2)d_2)=g(a)g(b)\),故 \(g(n)\) 是积性函数。在从 \(g(n)\) 转移到 \(g(np)\) 时,有:

\[g(np)=\begin{cases}g(n)g(p)&p\nmid n\\g(n)&p\mid n\end{cases} \]

稍微解释一下:当 \(d\)\(p\) 的次数超过 1 时不会对 \(g\) 有贡献(此时 \(\mu(d)=0\))。初始条件 \(g(p)=1-p\)

回到原式。线性筛 \(\mathcal{O}(n)\) 预处理 \(i\cdot g(i)\) 的前缀和,对 \(T\) 整除分块,时间复杂度优化到了 \(\mathcal{O}(n+T(\sqrt{n}+\sqrt{m}))\)

SPOJ5971 LCMSUM - LCM Sum

没做出来,看了 oiwiki 之后大受震撼,就当见世面了。

多测,求 \(\sum\limits_{i=1}^n\text{lcm}(i,n)\)\(n\le 10^6,T\le 3\times 10^5\)

\[\begin{aligned} ans&=\sum\limits_{i=1}^n\text{lcm}(i,n)\\ &=\sum\limits_{i=1}^{n}\dfrac{in}{\gcd(i,n)}\\ &=n+\dfrac{1}{2}\sum\limits_{i=1}^{n-1}\dfrac{in}{\gcd(i,n)}+\dfrac{in}{\gcd(n-i,n)}\\ &=n+\dfrac{1}{2}\sum\limits_{i=1}^{n-1}\dfrac{in+(n-i)n}{\gcd(i,n)}\\ &=n+\dfrac{1}{2}\sum\limits_{i=1}^{n-1}\dfrac{n^2}{\gcd(i,n)}\\ &=\dfrac{n}{2}+\dfrac{1}{2}\sum\limits_{i=1}^{n}\dfrac{n^2}{\gcd(i,n)}\\ &=\dfrac{n}{2}+\dfrac{1}{2}\sum\limits_{i=1}^{n}\sum\limits_{d|i,d|n,\gcd(\frac{i}{d},\frac{n}{d})=1}\dfrac{n^2}{d}\\ &=\dfrac{n}{2}+\dfrac{n^2}{2}\sum\limits_{d|n}\frac{1}{d}\varphi(\frac{n}{d})\\ &=\dfrac{n}{2}+\dfrac{n^2}{2}\sum\limits_{d|n}\frac{d}{n}\varphi(d)\\ &=\dfrac{n}{2}+\dfrac{n}{2}\sum\limits_{d|n}d\varphi(d)\\ \end{aligned} \]

\(f(n)=\sum\limits_{d|n}d\varphi(d)\),显然 \(f(n)\) 是积性函数。只要我们能线性筛出 \(f(n)\) 就可以做到 \(\mathcal{O}(n+T)\) 了。那么,能做到吗?

如果 \(p\nmid n\),则 \(f(np)=f(n)f(p)\);否则,令 \(n=n'p^k,\gcd(n',p)=1\),考虑 \(f(p^k)\) 的值。\(f(p^k)=\sum\limits_{i=0}^kp^i\varphi(p^i)=p^k\varphi(p^k)+\sum\limits_{i=0}^{k-1}p^i\varphi(p^i)=p^k(p-1)p^{k-1}+f(p^{k-1})\)。则

\[\begin{aligned} &f(np)=f(n')f(p^{k+1})=f(n')((p-1)p^{2k+1}+f(p^k))\\ &f(n)=f(n')f(p^k)=f(n')((p-1)p^{2k-1}+f(p^{k-1}))\\ &f(\frac{n}{p})=f(n')f(p^{k-1})\\ \end{aligned} \]

相邻作差得到

\[\begin{aligned} &f(np)-f(n)=f(n')f(p^{k+1})=f(n')(p-1)p^{2k+1}\\ &f(n)-f(\frac{n}{p})=f(n')(p-1)p^{2k-1}\\ \end{aligned} \]

\(f(np)=f(n)+f(n')(p-1)p^{2k+1}=f(n)+p^2(f(n)-f(\frac{n}{p}))\)


实际上,这个题也可以用更套路的方法得到上式。

\[\begin{aligned} ans&=\sum\limits_{i=1}^n\text{lcm}(i,n)\\ &=n\sum\limits_{i=1}^{n}\dfrac{i}{\gcd(i,n)}\\ &=n\sum\limits_{d|n}\sum\limits_{i=1}^{n}\dfrac{i}{d}[\gcd(i,n)=d]\\ &=n\sum\limits_{d|n}\sum\limits_{i=1}^{\frac{n}{d}}i[\gcd(i,\frac{n}{d})=1]\\ \end{aligned} \]

意思是说,我们现在要求不大于 \(\dfrac{n}{d}\) 的正整数中,与 \(\dfrac{n}{d}\) 互质的数的和。记其为 \(g(n)\),有

\[g(n)=\begin{cases}\dfrac{\varphi(n)n}{2}&n\ge 2\\1&n=1\end{cases} \]

为什么?当 \(n\ge 2\) 时,如果有 \(i\)\(n\) 互质,那么 \(n-i\) 也与 \(n\) 互质,可以进行一个配的对。

P3327 [SDOI2015] 约数个数和

先根据 \(d(nm)\) 的性质推一下性质。

\[\begin{aligned} d(nm)&=\sum\limits_{i|n}\sum\limits_{j|m}[\gcd(i,j)=1]\\ &=\sum\limits_{i|n}\sum\limits_{j|m}\varepsilon(\gcd(i,j))\\ &=\sum\limits_{i|n}\sum\limits_{j|m}\sum_{d|\gcd(i,j)}\mu(d)\\ &=\sum_{d=1}^n\mu(d)\sum\limits_{i|n}\sum\limits_{j|m}[d|\gcd(i,j)]\\ &=\sum_{d|n,d|m}\mu(d)\sum\limits_{i|\frac{n}{d}}\sum\limits_{j|\frac{m}{d}}1\\ &=\sum_{d|n,d|m}\mu(d)d(\frac{n}{d})d(\frac{m}{d})\\ \end{aligned} \]

代回题目所求式子,得

\[\begin{aligned} ans&=\sum\limits_{i=1}^n\sum\limits_{j=1}^m d(ij)\\ &=\sum\limits_{i=1}^n\sum\limits_{j=1}^m\sum_{d|i,d|j}\mu(d)d(\frac{i}{d})d(\frac{j}{d})\\ &=\sum_{d=1}^n\mu(d)\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor}d(i)d(j)\\ &=\sum_{d=1}^n\mu(d)\left(\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}d(i)\right)\left(\sum\limits_{j=1}^{\lfloor\frac{m}{d}\rfloor}d(j)\right)\\ \end{aligned} \]

可以在 \(\mathcal{O}(n)\) 的时间内预处理 \(d(i)\) 及其前缀和。

\[d(np)=\begin{cases}2d(n)&p\nmid n\\2d(n)-d(\frac{n}{p})&p\mid n\end{cases} \]

总时间复杂度 \(\mathcal{O}(n+T\sqrt{n})\)

P3704 [SDOI2017] 数字表格

\[\begin{aligned} ans&=\prod\limits_{i=1}^n\prod\limits_{j=1}^mf_{\gcd(i,j)}\\ \end{aligned} \]

\(f(n,m,k)=\sum\limits_{i=1}^n\sum\limits_{j=1}^m[\gcd(i,j)=k]\),有 \(f(n,m,k)=\sum\limits_{d=1}^{\lfloor\frac{n}{k}\rfloor}\mu(d)\lfloor\frac{\lfloor\frac{n}{k}\rfloor}{d}\rfloor\lfloor\frac{\lfloor\frac{m}{k}\rfloor}{d}\rfloor=\sum\limits_{d=1}^{\lfloor\frac{n}{k}\rfloor}\mu(d)\lfloor\frac{n}{kd}\rfloor\lfloor\frac{m}{kd}\rfloor\)。则:

\[\begin{aligned} ans&=\prod\limits_{k=1}^nf_k^{f(n,m,k)}\\ \end{aligned} \]

两次整除分块可以 \(\mathcal{O}(n)\),但还是接受不了。

还是套路的设 \(T=kd\),枚举 \(T\)。此时 \(f(n,m,k)=\sum\limits_{d=1}^{\lfloor\frac{n}{k}\rfloor}\mu(d)\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor=\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor\sum\limits_{d=1}^{\lfloor\frac{n}{k}\rfloor}\mu(d)\)

\[\begin{aligned} ans&=\prod\limits_{k=1}^nf_k^{f(n,m,k)}\\ &=\prod\limits_{T=1}^n\left(\prod\limits_{k|T}f_k^{\mu(\frac{T}{k})}\right)^{\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor}\\ \end{aligned} \]

\(g(n)=\prod\limits_{d|n}f_d^{\mu(\frac{n}{d})}\)\(g(n)\) 并没有什么性质,所以我们 \(\mathcal{O}(n\log n)\) 预处理,同时预处理出 \(g(n)\) 的前缀积及其逆元。每次询问对 \(T\) 整除分块 \(\mathcal{O}(\sqrt{n}\log n)\) 解决(\(\log n\) 是快速幂的复杂度)。

P5221 Product

题目本身很简单,可以当小甜点。

\[\begin{aligned} ans&=\prod\limits_{i=1}^n\prod\limits_{j=1}^n\frac{\text{lcm}(i,j)}{\gcd(i,j)}\\ &=\prod\limits_{i=1}^n\prod\limits_{j=1}^n\frac{ij}{\gcd^2(i,j)}\\ &=(n!)^{2n}\prod\limits_{i=1}^n\prod\limits_{j=1}^n\frac{1}{(\gcd(i,j))^2}\\ \end{aligned} \]

把后面的分母单独提出来,令 \(f(n,m)=\prod\limits_{i=1}^n\prod\limits_{j=1}^n(\gcd(i,j))^2\)

\[\begin{aligned} f(n,m)&=\prod\limits_{k=1}^n(k^2)^{\sum\limits_{i=1}^n\sum\limits_{j=1}^n[\gcd(i,j)=k]}\\ \end{aligned} \]

后面的就是典中典了,两次整除分块 \(\mathcal{O}(n)\) 送走。总时间复杂度 \(\mathcal{O}(n+\sqrt{n}\log n)\)

卡空间可以自己随便卡卡。

P2398 GCD SUM

\[\begin{aligned} ans&=\sum\limits_{i=1}^n\sum\limits_{j=1}^n\gcd(i,j)\\ &=\sum\limits_{k=1}^nk\sum\limits_{i=1}^n\sum\limits_{j=1}^n[\gcd(i,j)=k]\\ &=\sum\limits_{k=1}^nk\sum\limits_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{n}{k}\rfloor}[\gcd(i,j)=1]\\ &=\sum\limits_{k=1}^nk\sum\limits_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{n}{k}\rfloor}\sum\limits_{d|\gcd(i,j)}\mu(d)\\ &=\sum\limits_{k=1}^nk\sum\limits_{d=1}^{\lfloor\frac{n}{k}\rfloor}\mu(d)\left\lfloor\frac{n}{dk}\right\rfloor^2\\ \end{aligned} \]

还是老套路,令 \(T=dk\)

\[\begin{aligned} ans&=\sum\limits_{k=1}^nk\sum\limits_{d=1}^{\lfloor\frac{n}{k}\rfloor}\mu(d)\left\lfloor\frac{n}{dk}\right\rfloor^2\\ &=\sum\limits_{T=1}^n\left\lfloor\frac{n}{T}\right\rfloor^2\sum\limits_{d|T}\frac{T}{d}\mu(d)\\ \end{aligned} \]

后面的是积性函数,所以总时间复杂度 \(\mathcal{O}(n+\sqrt{n})\)(当然只有一次询问你可以直接两次整除分块)。


这是一个从 lsj 学长的博客里学来的神奇反演方法:我们可以用 \(\sum\limits_{d|n}\varphi(d)=n\) 来反演。

\[\begin{aligned} ans&=\sum\limits_{i=1}^n\sum\limits_{j=1}^n\gcd(i,j)\\ ans&=\sum\limits_{i=1}^n\sum\limits_{j=1}^n\sum\limits_{d|\gcd(i,j)}\varphi(d)\\ ans&=\sum\limits_{d=1}^n\varphi(d)\left\lfloor\dfrac{n}{d}\right\rfloor^2\\ \end{aligned} \]

我愿称之为欧拉反演。

SP26017 GCDMAT - GCD OF MATRIX

容斥之后跟上面一道题差不多,就不写了。

SP26045 GCDMAT2 - GCD OF MATRIX (hard)

跟上一道题做法相同,但是需要究极卡常。大概说一下需要注意的点:

  • 火车头,long long

  • 除法很慢,所以我们可以预先计算好 \(\dfrac{1}{i}\) 然后做乘法;

  • 直接算容斥是 \(4\times 2=8\) 倍常数的,其实可以一次计算;

  • 根号分治:当 \(i\) 很小的时候直接跑暴力,大的时候再跑整除分块;

  • spoj 上语言选 c++14。

UVA11417 GCD/UVA11424 GCD - Extreme (I)/SP3871 GCDEX - GCD Extreme/P1390 公约数的和/UVA11426 拿行李(极限版) GCD - Extreme (II)

五倍经验,数据范围递增。

\[\begin{aligned} ans&=\sum\limits_{i=1}^n\sum\limits_{j=i+1}^n\gcd(i,j)\\ &=\sum\limits_{k=1}^nk\sum\limits_{i=1}^n\sum\limits_{j=i+1}^n[\gcd(i,j)=k]\\ &=\sum\limits_{k=1}^nk\sum\limits_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum\limits_{j=i+1}^{\lfloor\frac{n}{k}\rfloor}[\gcd(i,j)=1]\\ &=\sum\limits_{k=1}^nk\sum\limits_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum\limits_{j=i+1}^{\lfloor\frac{n}{k}\rfloor}\sum\limits_{d|\gcd(i,j)}\mu(d)\\ &=\sum\limits_{k=1}^nk\sum\limits_{d=1}^{\lfloor\frac{n}{k}\rfloor}\mu(d)\frac{\left(\lfloor\frac{n}{dk}\rfloor-1\right)\lfloor\frac{n}{dk}\rfloor}{2}\\ \end{aligned} \]

剩下的就跟上一道题差不多了。

SP19985 GCDEX2 - GCD Extreme (hard)

上一道题的数据加强版,杜教筛即可。

P2568 GCD/P2257 YY的GCD/SP4491 PGCD - Primes in GCD Table

P2568 可以看做 P2257/SP4491 的弱化版,所以直接写 P2257 了。

\[\begin{aligned} ans&=\sum\limits_{i=1}^n\sum\limits_{j=1}^m[\gcd(i,j)\text{ is prime}]\\ &=\sum\limits_{k\text{ is prime}}^n\sum\limits_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{m}{k}\rfloor}\sum\limits_{d|\gcd(i,j)}\mu(d)\\ &=\sum\limits_{k\text{ is prime}}^n\sum\limits_{d=1}^{\lfloor\frac{n}{k}\rfloor}\mu(d)\lfloor\frac{n}{kd}\rfloor\lfloor\frac{m}{kd}\rfloor\\ &=\sum\limits_{T=1}^n\lfloor\frac{n}{T}\rfloor\lfloor\frac{m}{T}\rfloor\sum\limits_{k\text{ is prime}\land k|T}\mu(\frac{T}{k})\\ \end{aligned} \]

剩下的直接先筛出 \(\mu\),再枚举 \(k\) 预处理后面那坨即可。

P3911 最小公倍数之和

乐。

\(\text{lcm}(a_i,a_j)\) 非常奇怪,因为它并不是在数轴上连续的。考虑 \(c_i\) 表示 \(a_j=i\)\(j\) 有多少个,\(A\) 表示 \(\max\limits_{i=1}^n\left\{a_i\right\}\)

\[\begin{aligned} ans&=\sum\limits_{i=1}^A\sum\limits_{j=1}^A\text{lcm}(i,j)\cdot c_i\cdot c_j\\ &=\sum\limits_{i=1}^A\sum\limits_{j=1}^A\frac{ij\cdot c_ic_j}{\gcd(i,j)}\\ &=\sum\limits_{k=1}^A\frac{1}{k}\times k^2\sum\limits_{i=1}^{\lfloor\frac{A}{k}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{A}{k}\rfloor}ij\cdot c_{ik}c_{jk}\cdot [\gcd(i,j)=1]\\ &=\sum\limits_{k=1}^Ak\sum\limits_{d=1}^{\lfloor\frac{A}{k}\rfloor}d^2\mu(d)\sum\limits_{i=1}^{\lfloor\frac{A}{kd}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{A}{kd}\rfloor}ij\cdot c_{ikd}c_{jkd}\\ &=\sum\limits_{T=1}^AT\left(\sum\limits_{i=1}^{\lfloor\frac{A}{T}\rfloor}i\cdot c_{iT}\right)^2\sum\limits_{d|T}d\mu(d) \end{aligned} \]

可以 \(\mathcal{O}(n\ln n)\)

[AGC038C] LCMs

同上,最后答案减去 \(\sum\limits_{i=1}^n a_i\) 再除 2 即可。

P4449 于神之怒加强版

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

\(f(T)=\sum\limits_{d|T}\mu(d)(\frac{T}{d})^k\),显然这是积性函数,然后如果 \(p|n\) 那么 \(f(np)=p^kf(n)\),然后可以线性筛。

P1447 [NOI2010] 能量采集

观察可以发现,对于一个坐标 \((kx,ky)\) 满足 \(\gcd(x,y)=1\),所有的 \(i\in[1,k),(ix,iy)\) 都会使得 \((kx,ky)\) 损失能量,故所求答案可以写成 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^m(2(\gcd(i,j)-1)+1)\),后面随便做了。

CF439E. Devu and Birthday Celebration

好题。照例先推推式子

\[\begin{aligned} ans&=\sum\limits_{a_1=1}^m\sum\limits_{a_2=1}^m\ldots\sum\limits_{a_n=1}^m[\sum\limits_{i=1}^na_i=m][\gcd\limits_{i=1}^n\{a_i\}=1]\\ &=\sum\limits_{a_1=1}^m\sum\limits_{a_2=1}^m\ldots\sum\limits_{a_n=1}^m[\sum\limits_{i=1}^na_i=m]\sum\limits_{d|\gcd}\mu(d)\\ &=\sum\limits_{d|m}\mu(d)\sum\limits_{a_1=1}^{\frac{m}{d}}\sum\limits_{a_2=1}^{\frac{m}{d}}\ldots\sum\limits_{a_n=1}^{\frac{m}{d}}[\sum\limits_{i=1}^na_i=\frac{m}{d}]\\ &=\sum\limits_{d|m}\mu(d)\sum\limits_{a_1=1}^{\frac{m}{d}}\sum\limits_{a_2=1}^{\frac{m}{d}}\ldots\sum\limits_{a_n=1}^{\frac{m}{d}}[\sum\limits_{i=1}^na_i=\frac{m}{d}]\\ \end{aligned} \]

后面那一坨是简单的插板法,等于 \(\dbinom{\dfrac{m}{d}-1}{n-1}\)。于是就可以计算了!

CF900D. Unusual Sequences

和上一道题差不多啊,只是没有个数限制了,一样的。

P3172 [CQOI2015] 选数

突然感觉好简单啊,为什么以前不会()

下文令 \(L\gets \lceil\dfrac{L}{k}\rceil\)\(R\gets \lfloor\dfrac{R}{k}\rfloor\)

\[\begin{aligned} ans&=\sum\limits_{a_i\in[L,R]}[\gcd(a_i)=1]\\ &=\sum\limits_{d=1}^R\mu(d)\sum\limits_{a_i\in[L,R]}[d|\gcd(a_i)]\\ &=\sum\limits_{d=1}^R\mu(d)(\lfloor\dfrac{R}{d}\rfloor-\lceil\dfrac{L}{d}\rceil+1)^n\\ \end{aligned} \]

杜教筛维护一下 \(\mu\) 前缀和即可。

CF1575G. GCD Festival

老年人 *2200 做半天。

\[\begin{aligned} ans&=\sum\limits_{i=1}^n\sum\limits_{j=1}^n\gcd(a_i,a_j)\gcd(i,j)\\ &=\sum\limits_{d=1}^n\varphi(d)\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum\limits_{j=1}^{\lfloor\frac{n}{d}\rfloor}\gcd(a_{id},a_{jd})\\ &=\sum\limits_{d=1}^n\varphi(d)\sum\limits_{k}\varphi(k)\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}[k|a_{id}]\sum\limits_{j=1}^{\lfloor\frac{n}{d}\rfloor}[k|a_{jd}]\\ &=\sum\limits_{d=1}^n\varphi(d)\sum\limits_{k}\varphi(k)(\sum\limits_{i=1}^{\lfloor\frac{n}{d}\rfloor}[k|a_{id}])^2\\ \end{aligned} \]

复杂度 \(\mathcal{O}(n\ln nd(n))\)

P3768 简单的数学题

\[\begin{aligned} ans&=\sum_{i=1}^n\sum_{j=1}^nij\gcd(i,j)\\ &=\sum_{i=1}^n\sum_{j=1}^n\sum_{d|\gcd(i,j)}\varphi(d)\\ &=\sum_{d=1}^n\varphi(d)d^2\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{n}{d}\rfloor}ij\\ &=\sum_{d=1}^n\varphi(d)d^2f(\lfloor\frac{n}{d}\rfloor)\\ \end{aligned} \]

其中 \(f(n)=\sum_{i=1}^{n}\sum_{j=1}^{n}ij=\frac{n^2(n+1)^2}{4}\)

\(\sum_d\varphi(d)d^2\) 也很简单啊,卷上 \(Id_2\) 之后杜教筛就行。注意 \(\sum_{i=1}^ni^2=\frac{i(i+1)(2i+1)}{6}\)\(\sum_{i=1}^n i^3=f(n)\)

posted @ 2023-06-27 19:50  xx019  阅读(17)  评论(0编辑  收藏  举报