Loading docs/math/mobius.md +62 −62 Original line number Diff line number Diff line ## 简介 ##   莫比乌斯反演是数论中的重要内容。对于一些函数 $f(n)$,如果很难直接求出它的值,而容易求出其倍数和或约数和 $g(n)$,那么可以通过莫比乌斯反演简化运算,求得 $f(n)$ 的值。 莫比乌斯反演是数论中的重要内容。对于一些函数 $f(n)$,如果很难直接求出它的值,而容易求出其倍数和或约数和 $g(n)$,那么可以通过莫比乌斯反演简化运算,求得 $f(n)$ 的值。   开始学习莫比乌斯反演前,我们需要一些前置知识:**积性函数**、**Dirichlet 卷积**、**莫比乌斯函数**。 开始学习莫比乌斯反演前,我们需要一些前置知识:**积性函数**、**Dirichlet 卷积**、**莫比乌斯函数**。 --- Loading @@ -10,11 +10,11 @@ ### 定义 ###   若 $\gcd(x,y)=1$ 且 $f(xy)=f(x)f(y)$,则 $f(n)$ 为积性函数。 若 $\gcd(x,y)=1$ 且 $f(xy)=f(x)f(y)$,则 $f(n)$ 为积性函数。 ### 性质 ###   若 $f(x)$ 和 $g(x)$ 均为积性函数,则以下函数也为积性函数: 若 $f(x)$ 和 $g(x)$ 均为积性函数,则以下函数也为积性函数: $$ \begin{align*} Loading Loading @@ -48,15 +48,15 @@ $$ ### 定义 ###   定义两个数论函数 $f,g$ 的 $\text{Dirichlet}$ 卷积为 定义两个数论函数 $f,g$ 的 $\text{Dirichlet}$ 卷积为 $$(f*g)(n)=\sum_{d|n}f(d)g(\frac{n}{d})$$ ### 性质 ###   $\text{Dirichlet}$ 卷积满足交换律和结合律。 $\text{Dirichlet}$ 卷积满足交换律和结合律。   其中 $\epsilon$ 为 $\text{Dirichlet}$ 卷积的单位元(任何函数卷 $\epsilon$ 都为其本身) 其中 $\epsilon$ 为 $\text{Dirichlet}$ 卷积的单位元(任何函数卷 $\epsilon$ 都为其本身) ### 例子 ### $$ Loading @@ -74,11 +74,11 @@ $$ ### 定义 ###   $\mu$ 为莫比乌斯函数 $\mu$ 为莫比乌斯函数 ### 性质 ###   莫比乌斯函数不但是积性函数,还有如下性质: 莫比乌斯函数不但是积性函数,还有如下性质: $$ \mu(n)= Loading @@ -98,18 +98,18 @@ $$ \end{cases} $$   其中 $\displaystyle\epsilon(n)=\sum_{d|n}\mu(d)$ 即 $\epsilon=\mu*1$ 其中 $\displaystyle\epsilon(n)=\sum_{d|n}\mu(d)$ 即 $\epsilon=\mu*1$   设 $\displaystyle n=\prod_{i=1}^k{p_i}^{c_i},n'=\prod_{i=1}^k p_i$ 设 $\displaystyle n=\prod_{i=1}^k{p_i}^{c_i},n'=\prod_{i=1}^k p_i$   那么 $\displaystyle\sum_{d|n}\mu(d)=\sum_{d|n'}\mu(d)=\sum_{i=0}^k C_k^i\cdot(-1)^k$ 那么 $\displaystyle\sum_{d|n}\mu(d)=\sum_{d|n'}\mu(d)=\sum_{i=0}^k C_k^i\cdot(-1)^k$   根据二项式定理,易知该式子的值在 $k=0$ 即 $n=1$ 时值为 $1$ 否则为 $0$,这也同时证明了 $\sum_{d|n}\mu(d)=[n=1]$ 根据二项式定理,易知该式子的值在 $k=0$ 即 $n=1$ 时值为 $1$ 否则为 $0$,这也同时证明了 $\sum_{d|n}\mu(d)=[n=1]$ ### 线性筛 ###   由于 $\mu$ 函数为积性函数,因此可以线性筛莫比乌斯函数(线性筛基本可以求所有的积性函数,尽管方法不尽相同)。 由于 $\mu$ 函数为积性函数,因此可以线性筛莫比乌斯函数(线性筛基本可以求所有的积性函数,尽管方法不尽相同)。   **代码**: **代码**: ```cpp void getMu() { mu[1]=1; Loading @@ -129,17 +129,17 @@ void getMu() { ### 拓展 ###   证明 证明 $$\varphi*1=\text{ID}\text{(ID 函数即 } f(x)=x\text{)}$$   将 $n$ 分解质因数:$\displaystyle n=\prod_{i=1}^k {p_i}^{c_i}$ 将 $n$ 分解质因数:$\displaystyle n=\prod_{i=1}^k {p_i}^{c_i}$   首先,因为 $\varphi$ 是积性函数,故只要证明当 $n'=p^c$ 时 $\displaystyle\varphi*1=\sum_{d|n'}\varphi(\frac{n'}{d})=\text{ID}$ 成立即可。 首先,因为 $\varphi$ 是积性函数,故只要证明当 $n'=p^c$ 时 $\displaystyle\varphi*1=\sum_{d|n'}\varphi(\frac{n'}{d})=\text{ID}$ 成立即可。   因为 $p$ 是质数,于是 $d=p^0,p^1,p^2,\cdots,p^c$ 因为 $p$ 是质数,于是 $d=p^0,p^1,p^2,\cdots,p^c$   易知如下过程: 易知如下过程: $$ \begin{align*} Loading @@ -157,13 +157,13 @@ $$ ### 公式 ###   设 $f(n),g(n)$ 为两个数论函数。 设 $f(n),g(n)$ 为两个数论函数。   如果有 如果有 $$f(n)=\sum_{d|n}g(d)$$   那么有 那么有 $$g(n)=\sum_{d|n}\mu(d)f(\frac{n}{d})$$ Loading @@ -173,13 +173,13 @@ $$g(n)=\sum_{d|n}\mu(d)f(\frac{n}{d})$$ $$\sum_{d|n}\mu(d)f(\frac{n}{d})=\sum_{d|n}\mu(d)\sum_{k|\frac{n}{d}}g(k)=\sum_{k|n}g(k)\sum_{d|\frac{n}{k}}\mu(d)=g(n)$$   用 $\displaystyle\sum_{d|n}g(d)$ 来替换 $f(\dfrac{n}{d})$,再变换求和顺序。最后一步转为的依据:$\displaystyle\sum_{d|n}\mu(d)=[n=1]$,因此在 $\dfrac{n}{k}=1$ 时第二个和式的值才为 $1$。此时 $n=k$,故原式等价于 $\displaystyle\sum_{k|n}[n=k]\cdot g(k)=g(n)$ 用 $\displaystyle\sum_{d|n}g(d)$ 来替换 $f(\dfrac{n}{d})$,再变换求和顺序。最后一步转为的依据:$\displaystyle\sum_{d|n}\mu(d)=[n=1]$,因此在 $\dfrac{n}{k}=1$ 时第二个和式的值才为 $1$。此时 $n=k$,故原式等价于 $\displaystyle\sum_{k|n}[n=k]\cdot g(k)=g(n)$ - **运用卷积**:   原问题为:已知 $f=g*1$,证明 $g=f*\mu$ 原问题为:已知 $f=g*1$,证明 $g=f*\mu$   易知如下转化:$f*\mu=g*1*\mu\Rightarrow f*\mu=g$(其中 $1*\mu=\epsilon$) 易知如下转化:$f*\mu=g*1*\mu\Rightarrow f*\mu=g$(其中 $1*\mu=\epsilon$) --- Loading @@ -187,40 +187,40 @@ $$\sum_{d|n}\mu(d)f(\frac{n}{d})=\sum_{d|n}\mu(d)\sum_{k|\frac{n}{d}}g(k)=\sum_{ ### [「HAOI 2011」Problem b](https://www.lydsy.com/JudgeOnline/problem.php?id=2301) ###   求值(多组数据) 求值(多组数据) $$\sum_{i=x}^{n}\sum_{j=y}^{m}[\gcd(i,j)=k]\qquad (1\leqslant T,x,y,n,m,k\leqslant 5\times 10^4)$$   根据容斥原理,原式可以分成 $4$ 块来处理,每一块的式子都为 根据容斥原理,原式可以分成 $4$ 块来处理,每一块的式子都为 $$\sum_{i=1}^{n}\sum_{j=1}^{m}[\gcd(i,j)=k]$$   考虑化简该式子 考虑化简该式子 $$\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}[\gcd(i,j)=1]$$   因为 $\gcd(i,j)=1$ 时对答案才用贡献,于是我们可以将其替换为 $\epsilon(\gcd(i,j))$($\epsilon(n)$ 当且仅当 $n=1$ 时值为 $1$ 否则为 $0$ ),故原式化为 因为 $\gcd(i,j)=1$ 时对答案才用贡献,于是我们可以将其替换为 $\epsilon(\gcd(i,j))$($\epsilon(n)$ 当且仅当 $n=1$ 时值为 $1$ 否则为 $0$ ),故原式化为 $$\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}\epsilon(\gcd(i,j))$$   将 $\epsilon$ 函数展开得到 将 $\epsilon$ 函数展开得到 $$\displaystyle\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}\sum_{d| \gcd(i,j)}\mu(d)$$   变换求和顺序,先枚举 $d|gcd(i,j)$ 可得 变换求和顺序,先枚举 $d|gcd(i,j)$ 可得 $$\displaystyle\sum_{d=1}^{\lfloor\frac{n}{k}\rfloor}\mu(d)\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}d|i\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}d|j$$   (其中 $d|i$ 表示 $i$ 是 $d$ 的倍数时对答案有 $1$ 的贡献)   易知 $1\sim\lfloor\dfrac{n}{k}\rfloor$ 中 $d$ 的倍数有 $\lfloor\dfrac{n}{kd}\rfloor$ 个,故原式化为 (其中 $d|i$ 表示 $i$ 是 $d$ 的倍数时对答案有 $1$ 的贡献) 易知 $1\sim\lfloor\dfrac{n}{k}\rfloor$ 中 $d$ 的倍数有 $\lfloor\dfrac{n}{kd}\rfloor$ 个,故原式化为 $$\displaystyle\sum_{d=1}^{\lfloor\frac{n}{k}\rfloor}\mu(d) \lfloor\frac{n}{kd}\rfloor\lfloor\frac{m}{kd}\rfloor$$   很显然,式子可以数论分块求解(注意:过程中默认 $n\leqslant m$)。 很显然,式子可以数论分块求解(注意:过程中默认 $n\leqslant m$)。   **时间复杂度**:$\Theta(N+T\sqrt{n})$ **时间复杂度**:$\Theta(N+T\sqrt{n})$   **代码**: **代码**: ```cpp #include <cstdio> #include <algorithm> Loading Loading @@ -267,37 +267,37 @@ int main() { ### [「SPOJ 5971」LCMSUM](https://www.luogu.org/problemnew/show/SP5971) ###   求值(多组数据) 求值(多组数据) $$\sum_{i=1}^n \text{lcm}(i,n)\qquad (1\leqslant T\leqslant 3\times 10^5,1\leqslant n\leqslant 10^6)$$   易得原式即 易得原式即 $$\sum_{i=1}^n \frac{i\cdot n}{\gcd(i,n)}$$   根据 $\gcd(a,n)=1$ 时一定有 $\gcd(n-a,n)=1$ ,可将原式化为 根据 $\gcd(a,n)=1$ 时一定有 $\gcd(n-a,n)=1$ ,可将原式化为 $$\frac{1}{2}\cdot(\sum_{i=1}^{n-1}\frac{i\cdot n}{\gcd(i,n)}+\sum_{i=n-1}^{1}\frac{i\cdot n}{\gcd(i,n)})+n$$   上述式子中括号内的两个 $\sum$ 对应的项相等,故又可以化为 上述式子中括号内的两个 $\sum$ 对应的项相等,故又可以化为 $$\frac{1}{2}\cdot \sum_{i=1}^{n-1}\frac{n^2}{\gcd(i,n)}+n$$   可以将相同的 $\gcd(i,n)$ 合并在一起计算,故只需要统计 $\gcd(i,n)=d$ 的个数。当 $\gcd(i,n)=d$ 时,$\displaystyle\gcd(\frac{i}{d},\frac{n}{d})=1$,所以 $\gcd(i,n)=d$ 的个数有 $\displaystyle\varphi(\frac{n}{d})$ 个。 可以将相同的 $\gcd(i,n)$ 合并在一起计算,故只需要统计 $\gcd(i,n)=d$ 的个数。当 $\gcd(i,n)=d$ 时,$\displaystyle\gcd(\frac{i}{d},\frac{n}{d})=1$,所以 $\gcd(i,n)=d$ 的个数有 $\displaystyle\varphi(\frac{n}{d})$ 个。   故答案为 故答案为 $$ \frac{1}{2}\cdot\sum_{d|n}\frac{n^2\cdot\varphi(\frac{n}{d})}{d}+n$$   变换求和顺序,设 $\displaystyle d'=\frac{n}{d}$,式子化为 变换求和顺序,设 $\displaystyle d'=\frac{n}{d}$,式子化为 $$\frac{1}{2}n\cdot\sum_{d'|n}d'\cdot\varphi(d')+n$$   设 $\displaystyle \text{g}(n)=\sum_{d|n} d\cdot\varphi(d)$,已知 $\text{g}$ 为积性函数,于是可以 $\Theta(n)$ 预处理。最后枚举 $d$,统计贡献即可。 设 $\displaystyle \text{g}(n)=\sum_{d|n} d\cdot\varphi(d)$,已知 $\text{g}$ 为积性函数,于是可以 $\Theta(n)$ 预处理。最后枚举 $d$,统计贡献即可。   **时间复杂度**:$\Theta(n\log n)$ **时间复杂度**:$\Theta(n\log n)$   **代码**: **代码**: ```cpp #include <cstdio> const int N=1000000; Loading Loading @@ -338,57 +338,57 @@ int main() { ### [「BZOJ 2154」Crash的数字表格](https://www.lydsy.com/JudgeOnline/problem.php?id=2154) ###   求值(对 $20101009$ 取模) 求值(对 $20101009$ 取模) $$\sum_{i=1}^n\sum_{j=1}^m\text{lcm}(i,j)\qquad (n,m\leqslant 10^7)$$   易知原式等价于 易知原式等价于 $$\sum_{i=1}^n\sum_{j=1}^m\frac{i\cdot j}{\gcd(i,j)}$$   枚举最大公因数 $d$,显然两个数除以 $d$ 得到的数互质 枚举最大公因数 $d$,显然两个数除以 $d$ 得到的数互质 $$\sum_{i=1}^n\sum_{j=1}^m\sum_{d|i,d|j,\gcd(\frac{i}{d},\frac{j}{d})=1}\frac{i\cdot j}{d}$$   非常经典的 $\gcd$ 式子的化法 非常经典的 $\gcd$ 式子的化法 $$\sum_{d=1}^n d\cdot\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}[\gcd(i,j)=1]\ i\cdot j$$   后半段式子中,出现了互质数对之积的和,为了让式子更简洁就把它拿出来单独计算。于是我们记 后半段式子中,出现了互质数对之积的和,为了让式子更简洁就把它拿出来单独计算。于是我们记 $$\text{sum}(n,m)=\sum_{i=1}^n\sum_{j=1}^m [\gcd(i,j)=1]\ i\cdot j$$   接下来对 $\text{sum}(n,m)$ 进行化简。首先枚举约数,并将 $[\gcd(i,j)=1]$ 表示为 $\epsilon(\gcd(i,j))$ 接下来对 $\text{sum}(n,m)$ 进行化简。首先枚举约数,并将 $[\gcd(i,j)=1]$ 表示为 $\epsilon(\gcd(i,j))$ $$\sum_{d=1}^n\sum_{d|i}^n\sum_{d|j}^m\mu(d)\cdot i\cdot j$$   设 $i=i'\cdot d$,$j=j'\cdot d$,显然式子可以变为 设 $i=i'\cdot d$,$j=j'\cdot d$,显然式子可以变为 $$\sum_{d=1}^n\mu(d)\cdot d^2\cdot\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}i\cdot j$$   观察上式,前半段可以预处理前缀和;后半段又是一个范围内数对之和,记 观察上式,前半段可以预处理前缀和;后半段又是一个范围内数对之和,记 $$g(n,m)=\sum_{i=1}^n\sum_{j=1}^m i\cdot j=\frac{n\cdot(n+1)}{2}\times\frac{m\cdot(m+1)}{2}$$ 可以 $\Theta(1)$ 求解   至此 至此 $$\text{sum}(n,m)=\sum_{d=1}^n\mu(d)\cdot d^2\cdot g(\lfloor\frac{n}{d}\rfloor,\lfloor\frac{m}{d}\rfloor)$$   我们可以 $\lfloor\frac{n}{\lfloor\frac{n}{d}\rfloor}\rfloor$ 数论分块求解 $\text{sum}(n,m)$ 函数。 我们可以 $\lfloor\frac{n}{\lfloor\frac{n}{d}\rfloor}\rfloor$ 数论分块求解 $\text{sum}(n,m)$ 函数。   在求出 $\text{sum}(n,m)$ 后,回到定义 $\text{sum}$ 的地方,可得原式为 在求出 $\text{sum}(n,m)$ 后,回到定义 $\text{sum}$ 的地方,可得原式为 $$\sum_{d=1}^n d\cdot\text{sum}(\lfloor\frac{n}{d}\rfloor,\lfloor\frac{m}{d}\rfloor)$$   可见这又是一个可以数论分块求解的式子! 可见这又是一个可以数论分块求解的式子!   本题除了推式子比较复杂、代码细节较多之外,是一道很好的莫比乌斯反演练习题!(上述过程中,默认 $n\leqslant m$) 本题除了推式子比较复杂、代码细节较多之外,是一道很好的莫比乌斯反演练习题!(上述过程中,默认 $n\leqslant m$)   **时间复杂度**:$\Theta(n+m)$(两次数论分块) **时间复杂度**:$\Theta(n+m)$(两次数论分块)   **代码**: **代码**: ```cpp #include <cstdio> #include <algorithm> Loading Loading
docs/math/mobius.md +62 −62 Original line number Diff line number Diff line ## 简介 ##   莫比乌斯反演是数论中的重要内容。对于一些函数 $f(n)$,如果很难直接求出它的值,而容易求出其倍数和或约数和 $g(n)$,那么可以通过莫比乌斯反演简化运算,求得 $f(n)$ 的值。 莫比乌斯反演是数论中的重要内容。对于一些函数 $f(n)$,如果很难直接求出它的值,而容易求出其倍数和或约数和 $g(n)$,那么可以通过莫比乌斯反演简化运算,求得 $f(n)$ 的值。   开始学习莫比乌斯反演前,我们需要一些前置知识:**积性函数**、**Dirichlet 卷积**、**莫比乌斯函数**。 开始学习莫比乌斯反演前,我们需要一些前置知识:**积性函数**、**Dirichlet 卷积**、**莫比乌斯函数**。 --- Loading @@ -10,11 +10,11 @@ ### 定义 ###   若 $\gcd(x,y)=1$ 且 $f(xy)=f(x)f(y)$,则 $f(n)$ 为积性函数。 若 $\gcd(x,y)=1$ 且 $f(xy)=f(x)f(y)$,则 $f(n)$ 为积性函数。 ### 性质 ###   若 $f(x)$ 和 $g(x)$ 均为积性函数,则以下函数也为积性函数: 若 $f(x)$ 和 $g(x)$ 均为积性函数,则以下函数也为积性函数: $$ \begin{align*} Loading Loading @@ -48,15 +48,15 @@ $$ ### 定义 ###   定义两个数论函数 $f,g$ 的 $\text{Dirichlet}$ 卷积为 定义两个数论函数 $f,g$ 的 $\text{Dirichlet}$ 卷积为 $$(f*g)(n)=\sum_{d|n}f(d)g(\frac{n}{d})$$ ### 性质 ###   $\text{Dirichlet}$ 卷积满足交换律和结合律。 $\text{Dirichlet}$ 卷积满足交换律和结合律。   其中 $\epsilon$ 为 $\text{Dirichlet}$ 卷积的单位元(任何函数卷 $\epsilon$ 都为其本身) 其中 $\epsilon$ 为 $\text{Dirichlet}$ 卷积的单位元(任何函数卷 $\epsilon$ 都为其本身) ### 例子 ### $$ Loading @@ -74,11 +74,11 @@ $$ ### 定义 ###   $\mu$ 为莫比乌斯函数 $\mu$ 为莫比乌斯函数 ### 性质 ###   莫比乌斯函数不但是积性函数,还有如下性质: 莫比乌斯函数不但是积性函数,还有如下性质: $$ \mu(n)= Loading @@ -98,18 +98,18 @@ $$ \end{cases} $$   其中 $\displaystyle\epsilon(n)=\sum_{d|n}\mu(d)$ 即 $\epsilon=\mu*1$ 其中 $\displaystyle\epsilon(n)=\sum_{d|n}\mu(d)$ 即 $\epsilon=\mu*1$   设 $\displaystyle n=\prod_{i=1}^k{p_i}^{c_i},n'=\prod_{i=1}^k p_i$ 设 $\displaystyle n=\prod_{i=1}^k{p_i}^{c_i},n'=\prod_{i=1}^k p_i$   那么 $\displaystyle\sum_{d|n}\mu(d)=\sum_{d|n'}\mu(d)=\sum_{i=0}^k C_k^i\cdot(-1)^k$ 那么 $\displaystyle\sum_{d|n}\mu(d)=\sum_{d|n'}\mu(d)=\sum_{i=0}^k C_k^i\cdot(-1)^k$   根据二项式定理,易知该式子的值在 $k=0$ 即 $n=1$ 时值为 $1$ 否则为 $0$,这也同时证明了 $\sum_{d|n}\mu(d)=[n=1]$ 根据二项式定理,易知该式子的值在 $k=0$ 即 $n=1$ 时值为 $1$ 否则为 $0$,这也同时证明了 $\sum_{d|n}\mu(d)=[n=1]$ ### 线性筛 ###   由于 $\mu$ 函数为积性函数,因此可以线性筛莫比乌斯函数(线性筛基本可以求所有的积性函数,尽管方法不尽相同)。 由于 $\mu$ 函数为积性函数,因此可以线性筛莫比乌斯函数(线性筛基本可以求所有的积性函数,尽管方法不尽相同)。   **代码**: **代码**: ```cpp void getMu() { mu[1]=1; Loading @@ -129,17 +129,17 @@ void getMu() { ### 拓展 ###   证明 证明 $$\varphi*1=\text{ID}\text{(ID 函数即 } f(x)=x\text{)}$$   将 $n$ 分解质因数:$\displaystyle n=\prod_{i=1}^k {p_i}^{c_i}$ 将 $n$ 分解质因数:$\displaystyle n=\prod_{i=1}^k {p_i}^{c_i}$   首先,因为 $\varphi$ 是积性函数,故只要证明当 $n'=p^c$ 时 $\displaystyle\varphi*1=\sum_{d|n'}\varphi(\frac{n'}{d})=\text{ID}$ 成立即可。 首先,因为 $\varphi$ 是积性函数,故只要证明当 $n'=p^c$ 时 $\displaystyle\varphi*1=\sum_{d|n'}\varphi(\frac{n'}{d})=\text{ID}$ 成立即可。   因为 $p$ 是质数,于是 $d=p^0,p^1,p^2,\cdots,p^c$ 因为 $p$ 是质数,于是 $d=p^0,p^1,p^2,\cdots,p^c$   易知如下过程: 易知如下过程: $$ \begin{align*} Loading @@ -157,13 +157,13 @@ $$ ### 公式 ###   设 $f(n),g(n)$ 为两个数论函数。 设 $f(n),g(n)$ 为两个数论函数。   如果有 如果有 $$f(n)=\sum_{d|n}g(d)$$   那么有 那么有 $$g(n)=\sum_{d|n}\mu(d)f(\frac{n}{d})$$ Loading @@ -173,13 +173,13 @@ $$g(n)=\sum_{d|n}\mu(d)f(\frac{n}{d})$$ $$\sum_{d|n}\mu(d)f(\frac{n}{d})=\sum_{d|n}\mu(d)\sum_{k|\frac{n}{d}}g(k)=\sum_{k|n}g(k)\sum_{d|\frac{n}{k}}\mu(d)=g(n)$$   用 $\displaystyle\sum_{d|n}g(d)$ 来替换 $f(\dfrac{n}{d})$,再变换求和顺序。最后一步转为的依据:$\displaystyle\sum_{d|n}\mu(d)=[n=1]$,因此在 $\dfrac{n}{k}=1$ 时第二个和式的值才为 $1$。此时 $n=k$,故原式等价于 $\displaystyle\sum_{k|n}[n=k]\cdot g(k)=g(n)$ 用 $\displaystyle\sum_{d|n}g(d)$ 来替换 $f(\dfrac{n}{d})$,再变换求和顺序。最后一步转为的依据:$\displaystyle\sum_{d|n}\mu(d)=[n=1]$,因此在 $\dfrac{n}{k}=1$ 时第二个和式的值才为 $1$。此时 $n=k$,故原式等价于 $\displaystyle\sum_{k|n}[n=k]\cdot g(k)=g(n)$ - **运用卷积**:   原问题为:已知 $f=g*1$,证明 $g=f*\mu$ 原问题为:已知 $f=g*1$,证明 $g=f*\mu$   易知如下转化:$f*\mu=g*1*\mu\Rightarrow f*\mu=g$(其中 $1*\mu=\epsilon$) 易知如下转化:$f*\mu=g*1*\mu\Rightarrow f*\mu=g$(其中 $1*\mu=\epsilon$) --- Loading @@ -187,40 +187,40 @@ $$\sum_{d|n}\mu(d)f(\frac{n}{d})=\sum_{d|n}\mu(d)\sum_{k|\frac{n}{d}}g(k)=\sum_{ ### [「HAOI 2011」Problem b](https://www.lydsy.com/JudgeOnline/problem.php?id=2301) ###   求值(多组数据) 求值(多组数据) $$\sum_{i=x}^{n}\sum_{j=y}^{m}[\gcd(i,j)=k]\qquad (1\leqslant T,x,y,n,m,k\leqslant 5\times 10^4)$$   根据容斥原理,原式可以分成 $4$ 块来处理,每一块的式子都为 根据容斥原理,原式可以分成 $4$ 块来处理,每一块的式子都为 $$\sum_{i=1}^{n}\sum_{j=1}^{m}[\gcd(i,j)=k]$$   考虑化简该式子 考虑化简该式子 $$\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}[\gcd(i,j)=1]$$   因为 $\gcd(i,j)=1$ 时对答案才用贡献,于是我们可以将其替换为 $\epsilon(\gcd(i,j))$($\epsilon(n)$ 当且仅当 $n=1$ 时值为 $1$ 否则为 $0$ ),故原式化为 因为 $\gcd(i,j)=1$ 时对答案才用贡献,于是我们可以将其替换为 $\epsilon(\gcd(i,j))$($\epsilon(n)$ 当且仅当 $n=1$ 时值为 $1$ 否则为 $0$ ),故原式化为 $$\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}\epsilon(\gcd(i,j))$$   将 $\epsilon$ 函数展开得到 将 $\epsilon$ 函数展开得到 $$\displaystyle\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}\sum_{d| \gcd(i,j)}\mu(d)$$   变换求和顺序,先枚举 $d|gcd(i,j)$ 可得 变换求和顺序,先枚举 $d|gcd(i,j)$ 可得 $$\displaystyle\sum_{d=1}^{\lfloor\frac{n}{k}\rfloor}\mu(d)\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}d|i\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}d|j$$   (其中 $d|i$ 表示 $i$ 是 $d$ 的倍数时对答案有 $1$ 的贡献)   易知 $1\sim\lfloor\dfrac{n}{k}\rfloor$ 中 $d$ 的倍数有 $\lfloor\dfrac{n}{kd}\rfloor$ 个,故原式化为 (其中 $d|i$ 表示 $i$ 是 $d$ 的倍数时对答案有 $1$ 的贡献) 易知 $1\sim\lfloor\dfrac{n}{k}\rfloor$ 中 $d$ 的倍数有 $\lfloor\dfrac{n}{kd}\rfloor$ 个,故原式化为 $$\displaystyle\sum_{d=1}^{\lfloor\frac{n}{k}\rfloor}\mu(d) \lfloor\frac{n}{kd}\rfloor\lfloor\frac{m}{kd}\rfloor$$   很显然,式子可以数论分块求解(注意:过程中默认 $n\leqslant m$)。 很显然,式子可以数论分块求解(注意:过程中默认 $n\leqslant m$)。   **时间复杂度**:$\Theta(N+T\sqrt{n})$ **时间复杂度**:$\Theta(N+T\sqrt{n})$   **代码**: **代码**: ```cpp #include <cstdio> #include <algorithm> Loading Loading @@ -267,37 +267,37 @@ int main() { ### [「SPOJ 5971」LCMSUM](https://www.luogu.org/problemnew/show/SP5971) ###   求值(多组数据) 求值(多组数据) $$\sum_{i=1}^n \text{lcm}(i,n)\qquad (1\leqslant T\leqslant 3\times 10^5,1\leqslant n\leqslant 10^6)$$   易得原式即 易得原式即 $$\sum_{i=1}^n \frac{i\cdot n}{\gcd(i,n)}$$   根据 $\gcd(a,n)=1$ 时一定有 $\gcd(n-a,n)=1$ ,可将原式化为 根据 $\gcd(a,n)=1$ 时一定有 $\gcd(n-a,n)=1$ ,可将原式化为 $$\frac{1}{2}\cdot(\sum_{i=1}^{n-1}\frac{i\cdot n}{\gcd(i,n)}+\sum_{i=n-1}^{1}\frac{i\cdot n}{\gcd(i,n)})+n$$   上述式子中括号内的两个 $\sum$ 对应的项相等,故又可以化为 上述式子中括号内的两个 $\sum$ 对应的项相等,故又可以化为 $$\frac{1}{2}\cdot \sum_{i=1}^{n-1}\frac{n^2}{\gcd(i,n)}+n$$   可以将相同的 $\gcd(i,n)$ 合并在一起计算,故只需要统计 $\gcd(i,n)=d$ 的个数。当 $\gcd(i,n)=d$ 时,$\displaystyle\gcd(\frac{i}{d},\frac{n}{d})=1$,所以 $\gcd(i,n)=d$ 的个数有 $\displaystyle\varphi(\frac{n}{d})$ 个。 可以将相同的 $\gcd(i,n)$ 合并在一起计算,故只需要统计 $\gcd(i,n)=d$ 的个数。当 $\gcd(i,n)=d$ 时,$\displaystyle\gcd(\frac{i}{d},\frac{n}{d})=1$,所以 $\gcd(i,n)=d$ 的个数有 $\displaystyle\varphi(\frac{n}{d})$ 个。   故答案为 故答案为 $$ \frac{1}{2}\cdot\sum_{d|n}\frac{n^2\cdot\varphi(\frac{n}{d})}{d}+n$$   变换求和顺序,设 $\displaystyle d'=\frac{n}{d}$,式子化为 变换求和顺序,设 $\displaystyle d'=\frac{n}{d}$,式子化为 $$\frac{1}{2}n\cdot\sum_{d'|n}d'\cdot\varphi(d')+n$$   设 $\displaystyle \text{g}(n)=\sum_{d|n} d\cdot\varphi(d)$,已知 $\text{g}$ 为积性函数,于是可以 $\Theta(n)$ 预处理。最后枚举 $d$,统计贡献即可。 设 $\displaystyle \text{g}(n)=\sum_{d|n} d\cdot\varphi(d)$,已知 $\text{g}$ 为积性函数,于是可以 $\Theta(n)$ 预处理。最后枚举 $d$,统计贡献即可。   **时间复杂度**:$\Theta(n\log n)$ **时间复杂度**:$\Theta(n\log n)$   **代码**: **代码**: ```cpp #include <cstdio> const int N=1000000; Loading Loading @@ -338,57 +338,57 @@ int main() { ### [「BZOJ 2154」Crash的数字表格](https://www.lydsy.com/JudgeOnline/problem.php?id=2154) ###   求值(对 $20101009$ 取模) 求值(对 $20101009$ 取模) $$\sum_{i=1}^n\sum_{j=1}^m\text{lcm}(i,j)\qquad (n,m\leqslant 10^7)$$   易知原式等价于 易知原式等价于 $$\sum_{i=1}^n\sum_{j=1}^m\frac{i\cdot j}{\gcd(i,j)}$$   枚举最大公因数 $d$,显然两个数除以 $d$ 得到的数互质 枚举最大公因数 $d$,显然两个数除以 $d$ 得到的数互质 $$\sum_{i=1}^n\sum_{j=1}^m\sum_{d|i,d|j,\gcd(\frac{i}{d},\frac{j}{d})=1}\frac{i\cdot j}{d}$$   非常经典的 $\gcd$ 式子的化法 非常经典的 $\gcd$ 式子的化法 $$\sum_{d=1}^n d\cdot\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}[\gcd(i,j)=1]\ i\cdot j$$   后半段式子中,出现了互质数对之积的和,为了让式子更简洁就把它拿出来单独计算。于是我们记 后半段式子中,出现了互质数对之积的和,为了让式子更简洁就把它拿出来单独计算。于是我们记 $$\text{sum}(n,m)=\sum_{i=1}^n\sum_{j=1}^m [\gcd(i,j)=1]\ i\cdot j$$   接下来对 $\text{sum}(n,m)$ 进行化简。首先枚举约数,并将 $[\gcd(i,j)=1]$ 表示为 $\epsilon(\gcd(i,j))$ 接下来对 $\text{sum}(n,m)$ 进行化简。首先枚举约数,并将 $[\gcd(i,j)=1]$ 表示为 $\epsilon(\gcd(i,j))$ $$\sum_{d=1}^n\sum_{d|i}^n\sum_{d|j}^m\mu(d)\cdot i\cdot j$$   设 $i=i'\cdot d$,$j=j'\cdot d$,显然式子可以变为 设 $i=i'\cdot d$,$j=j'\cdot d$,显然式子可以变为 $$\sum_{d=1}^n\mu(d)\cdot d^2\cdot\sum_{i=1}^{\lfloor\frac{n}{d}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{d}\rfloor}i\cdot j$$   观察上式,前半段可以预处理前缀和;后半段又是一个范围内数对之和,记 观察上式,前半段可以预处理前缀和;后半段又是一个范围内数对之和,记 $$g(n,m)=\sum_{i=1}^n\sum_{j=1}^m i\cdot j=\frac{n\cdot(n+1)}{2}\times\frac{m\cdot(m+1)}{2}$$ 可以 $\Theta(1)$ 求解   至此 至此 $$\text{sum}(n,m)=\sum_{d=1}^n\mu(d)\cdot d^2\cdot g(\lfloor\frac{n}{d}\rfloor,\lfloor\frac{m}{d}\rfloor)$$   我们可以 $\lfloor\frac{n}{\lfloor\frac{n}{d}\rfloor}\rfloor$ 数论分块求解 $\text{sum}(n,m)$ 函数。 我们可以 $\lfloor\frac{n}{\lfloor\frac{n}{d}\rfloor}\rfloor$ 数论分块求解 $\text{sum}(n,m)$ 函数。   在求出 $\text{sum}(n,m)$ 后,回到定义 $\text{sum}$ 的地方,可得原式为 在求出 $\text{sum}(n,m)$ 后,回到定义 $\text{sum}$ 的地方,可得原式为 $$\sum_{d=1}^n d\cdot\text{sum}(\lfloor\frac{n}{d}\rfloor,\lfloor\frac{m}{d}\rfloor)$$   可见这又是一个可以数论分块求解的式子! 可见这又是一个可以数论分块求解的式子!   本题除了推式子比较复杂、代码细节较多之外,是一道很好的莫比乌斯反演练习题!(上述过程中,默认 $n\leqslant m$) 本题除了推式子比较复杂、代码细节较多之外,是一道很好的莫比乌斯反演练习题!(上述过程中,默认 $n\leqslant m$)   **时间复杂度**:$\Theta(n+m)$(两次数论分块) **时间复杂度**:$\Theta(n+m)$(两次数论分块)   **代码**: **代码**: ```cpp #include <cstdio> #include <algorithm> Loading