莫比乌斯反演与狄利克雷卷积
比较无聊,不建议 OI 选手学,也不建议将这部分出成赛题。
一、基本定义
我们先定义数论函数:定义域为正整数,值域为一个数集的函数。
定义两个数论函数的狄利克雷卷积:
- 若 \(t=f\ast g\),则 \(t(n)=\sum_{i\mid n}f(i)g\left(\dfrac{n}{i}\right)\)。
狄利克雷卷积是满足交换律和结合律的。
我们再补充一个分配律:\((f+g)\ast h=f\ast h+g\ast h\)(这个很显然啊)。
以及一个逆元的求法:
-
对于每个 \(f(1)\not = 0\) 的函数 \(f\),都有 \(g\) 使 \(f*g=\varepsilon\)。
-
定义 \(g(n)=\dfrac{1}{f(1)}\left([n=1]-\sum_{i\mid n,i\not =1}f(i)g\left(\dfrac{n}{i}\right)\right)\)。
-
易知:\(\sum_{i\mid n}f(i)g\left(\dfrac{n}{i}\right)=f(1)g(n)+\sum_{i\mid n,i\not = 1}f(i)g\left(\dfrac{n}{i}\right)=[n=1]\)。
补充结论:
-
两个积性函数的狄利克雷卷积是积性函数。
证明:若 \(n\bot m\),且 \(a\mid n\),\(b\mid m\),则 \(a\bot b\),此时:
\[\begin{aligned} t(nm)&=\sum_{d\mid nm}f(d)g\left(\dfrac{nm}{d}\right) \\\\ &= \sum_{ab\mid nm}f(ab)g\left(\dfrac{nm}{ab}\right) \\\\ &= \sum_{ab\mid nm} f(a)g\left(\dfrac{n}{a}\right)f(b)g\left(\dfrac{m}{b}\right) \\\\ &= \left(\sum_{a\mid n}f(a)g\left(\dfrac{n}{a}\right)\right)\left(\sum_{b\mid n}f(b)g\left(\dfrac{m}{b}\right)\right) \\\\ &= t(n)t(m) & \square \end{aligned}\] -
积性函数的逆是积性函数(不考虑 \(f(1)=0\))。
证明:考虑对 \(nm\) 的大小进行归纳。
-
若 \(nm=1\),则 \(g(1)=1\),结论成立
-
假设 \(nm>1\),当 \(n'm'<nm\) 时有 \(g(n'm')=g(n')g(m')\),欲证 \(nm\) 时满足命题:
\[\begin{aligned} g(nm)&=-\sum_{d\mid nm,d\ne 1}f(d)g\left(\dfrac{nm}{d}\right) \\\\ &= -\sum_{a\mid n,b\mid m,ab\ne 1}f(a)f(b)g\left(\dfrac{n}{a}\right)g\left(\dfrac{m}{b}\right) \\\\ &= f(1)f(1)g(n)g(m)-\sum_{a\mid n,b\mid m}f(a)f(b)g\left(\dfrac{n}{a}\right)g\left(\dfrac{m}{b}\right) \\\\ &= g(n)g(m)-\left(\sum_{a\mid n}f(a)g\left(\dfrac{n}{a}\right)\right)\left(\sum_{b\mid m}f(b)g\left(\dfrac{m}{b}\right)\right) \\\\ &= g(n)g(m)-\varepsilon(n)\varepsilon(m) \\\\ &= g(n)g(m) \end{aligned}\]这里 \(\dfrac{nm}{ab}<nm\) 可运用归纳条件。
\(\mathcal{Q.E.D.}\)
-
二、符号及常用结论
-
常用的几个符号:
\(\varepsilon\),这个函数是单位元,具体来说,除了 \(\varepsilon(1)=1\),其余都为 0。(完全积性)
\(\mathrm{id}\),字面意思就是 \(\mathrm{id}(n)=n\)。(完全积性)
\(\sigma_k\),这个叫做除数函数,具体来说它是 \(\sigma_k(n)=\sum_{d\mid n}d^k\)。(积性)
\(\mathrm{1}\),它就是黎曼函数。具体来说就是 \(\mathrm{1}(n)=\zeta(n)=1\)。(完全积性)
\(\varphi\) 和 \(\mu\) 我就不多介绍了。
-
常用结论:
-
莫比乌斯反演:
\[[n=1]=\sum_{d\mid n}\mu(d) \]写成狄利克雷卷积就是:
\[\varepsilon=1\ast\mu \] -
经典的结论:
\[n=\sum_{d\mid n}\varphi(d) \]写成狄利克雷卷积就是:
\[\mathrm{id}=1\ast \varphi \]其逆即为:
\[\mathrm{id}*\mu=\varphi \] -
约数函数有关卷积:
\[\sigma_0=\mathrm{1}*\mathrm{1} \]\[\sigma=\mathrm{id}*\mathrm{1} \]\[\sigma _ k = \mathrm{id} ^ k \ast \mathrm{1} \]以及一个:
\[\sigma _ 0 (xy)=\sum _ {i\mid x}\sum _ {j\mid y} [\gcd (i,j)=1] \]这个结论的扩展:
\[\sigma _ 0(xyz)=\sum_{i\mid x}\sum_{j\mid y}\sum_{k\mid z}[\gcd(i,j)=1][\gcd(j,k)=1][\gcd(i,k)=1] \]
-
-
关于 \(\operatorname{lcm}\) 卷积:
\[h ( n ) = \sum _ { i = 1 } ^ { n } \sum _ { j = 1 } ^ { n } f ( i ) g ( j ) [ \operatorname {lcm} ( i , j ) = n ] \]这个卷积等价于:
\[h \ast \mathrm{1} = ( f \ast \mathrm { 1 } ) \cdot ( g \ast \mathrm{1} ) \]实际上只要知道:
\[[\operatorname{lcm} ( i ,j ) \mid n ] = [ i \mid n ] [ j \mid n ] \]这里 \(\gcd\) 卷积没有太大的计算价值,因为大部分情况是会产生无限求和的状况。
三、积性函数求法
通过线性筛求积性函数,一般有两种方法:
-
分类讨论这个东西:
- \(f(1)=1\)。
- \(n\in \mathcal{P},f(n)\),这里 \(\mathcal{P}\) 指质数集。
- \(p\mid n,p^2 \nmid n,f(n)=f\left(n/p\right)f(p)\)
- \(p\mid n,p^2\mid n,f(n)\),这里一般不同情况不同分析。
- 经典的例子有一般的 \(\mu\) 和 \(\varphi\) 的求法。
-
先算出 \(f\) 在素数幂的取值,对于每个 \(n\) 求出其最小质因数 \(p_k\) 及 其次数 \(c_k\),直接 \(f(n)=f(p_k^{c_k})f\left(n/{p_k^{c_k}}\right)\) 算就可以了。这个次数可以递推求。
当然素数幂处的取值也不一定很好求。
-
(From EI)现在我们来谈一谈一种特殊的情况 \(h=f*g\),其中 \(f\) 和 \(g\) 都是积性函数。
很容易知道 \(h\) 是积性函数。那么同理我们可以按照上面的方法 2 求取。
那么很显然我们需要知道这个 \(h\) 在 \(p^k\) 的取值。
容易知道:
\[h(p^k)=\sum_{d=0}^{k}f(p^d)g(p^{k-d}) \]那么我们在 \(p^k\) 处计算 \(h\) 需要 \(\Theta(k)\) 的复杂度。
我们考虑枚举 \(p\) 的指数 \(k\),则 \(k\le \log_2 n\)。
若我们指定 \(k\),则使 \(p^k\le n\) 的 \(p\) 只有 \(\pi(\lfloor \sqrt[x]{n}\rfloor)\) 个。
因此这个复杂度:
\[\begin{aligned} T(n)&=O\left(\sum_{x=1}^{\log_2 n} x\pi(\lfloor \sqrt[x]{n}\rfloor)\right) \\\\ &= O\left(\sum_{x=1}^{\log_2 n}\dfrac{x\sqrt[x]{n}}{\ln \sqrt[x]{n}}\right) \\\\ &= O\left(\dfrac{1}{\ln n}\sum_{x=1}^{\log_2 n}x^2\sqrt[x]{n}\right) \end{aligned}\]现在尝试寻找 \(x^2\sqrt[x]{n}\) 的极值:
\[\dfrac{\operatorname{d}}{\operatorname{d} x}x^2\sqrt[x]{n}=\sqrt[x]{n}(2x-\ln n) \]可知原函数单峰下凸,在 \(x=1\) 时得 \(n\)。
用最大值作界得到:
\[T(n)\le \dfrac{\log_2 n}{\ln n}n=O(n) \]Wky 觉得这个方法比较傻,给了一种简明一些的方法:
因为对于 \(k=1\),一共有 \(\pi(n)\) 个 \(p\)。
对于每个 \(k\in [2,\log_2 n]\),最多只有 \(\pi(\sqrt[k]{n})<\sqrt[k]{n}\) 个 \(p\)。
那么 \(n\) 以内 \(p^k\) 的个数就是 \(O(\pi(n)+\sqrt{n}\log_2 n)=O\left(\dfrac{n}{\ln n}\right)\)(数量级可以通过相除比较)。
那么总的计算复杂度 \(T(n)=O\left(\dfrac{n\log_2 n}{\ln n}\right)=O(n)\)。
不过这个复杂度分析本身就是简单的,读者选自己喜欢的方式理解就好。
四、贝尔级数
这一块我不太明白。
博文内容来自 rqy,cmd。
定义积性函数 \(f\) 模 \(p\) 的贝尔级数为:
这样的话根据积性函数的性质,狄利克雷卷积就变成了一般卷积:
加法形式也是有意义的,但是不是对应 \((f+g)\),这点请一定要注意:
简单的解释一下,在素数幂处为两者函数值相加,其他数值处满足积性,这样的一个函数。减法当然也是同理。
求逆的话也比较简单,若 \(f\ast g=\varepsilon\),则:
一般写法就类似于 \(1=\mathrm{id}\ast \varphi^{-1}\) 这样子。
常见的封闭形式:
-
\(\varepsilon_p(x)=1\)
-
\(\zeta_p(x)=\dfrac{1}{1-x}\)
-
$ \mathrm {id} ^k _ p (x)=\dfrac{1}{1-p^kx}$
-
\(\mu _ p(x)=1-x\),\((\mu\cdot\mu)_p(x)=1+x\)
-
\(\sigma _ {0p}(x)=\dfrac{1}{(1-x)^2}\)
-
\(\varphi_p(x)=\dfrac{1-x}{1-px}\)
-
\((\mathrm{id}\cdot \mu)_p(x)=1-px\)
Hint:仔细想一想 \(f(p^x)\) 等于什么,变成一个正常的 OGF。
也可以利用已知结论推导,比如 \(\varphi _ p(x)=\mu _ p(x)\mathrm{id_p}(x)\)。
或者说从函数的一些基础定义理解。
点乘的话就是对应 \(x^i\) 的系数相乘即可。贝尔级数上并没有初等运算可以对应。
一种特殊的点乘是数论函数 \(f\) 点乘上 $\mathrm{id} ^ k $,这种情况下我们是可以求出其贝尔级数的:
这个时候将 \(p^kx\) 视作整体,代入 \(f_p(x)\) 就可以了。
比如:\((\varphi\cdot \mathrm{id} ^ 2)_p(x)=\dfrac{1-p^2x}{1-p^3x}\)。
P3768 简单的数学题 可以作为练习。
有关这个的习题似乎很难找(?)。
我自己出了一道:U214268 不老不死的竹林引路人。
rqy 有一个题:
求前缀和。
可以知道:
这里的 \(g=(\mathrm {id} \cdot \mu) \ast \mu ^ 2\) 应该算得上是很简单的形式了……但这个 \(g\) 的前缀和求取一定需要用杜教筛了,复杂度上会高于线性。
可能会存在狄利克雷生成函数能做而贝尔级数做不了的东西(只要出现一个非积性数论函数)。
五、总结
-
关于如何理解莫比乌斯反演如何加速计算:
莫比乌斯反演从某种角度来看是数论容斥,这对加速计算本身没有什么帮助。
但换序求和与数论分块提供了复杂度的优化。
数论分块的原理是同数值的划分与打包。
换序求和实际上就是实现了对容斥集合的较优划分。
-
定义运算 \(\cdot\),表示 \((f\cdot g)(n)=f(n)g(n)\)。
显然 \(\mathrm{1}=\zeta\) 是单位元。
若 \(f\) 是完全积性的,有性质:
\[(f\cdot g)\ast (f\cdot h)=f\cdot(g\ast h) \]一般尝试展开成普通的求和形式。主要是用在杜教筛里的。
-
关于莫反的一个值域平衡技巧。
-
狄利克雷前缀和技巧。
可以 \(O( n \ln \ln n )\) 做 \(\mu / \zeta\) 变换及其反向变换 P5495 。
当然还有一个技巧可以做到 \(O(n)\)。简单一些说,就是群直积的卷积变换可分解成独立的卷积变换(From rqy)……
做法是这样的:
\[g( i , n ) = \sum _ { d \mid n , d 只含前 i 种质因子} \mu \left( \dfrac{n}{d}\right) f ( d ) \]然后就有:
\[g( i , n ) = \begin{cases} g ( i - 1 , n ) & p _ i \nmid n \\ g ( i - 1 , n ) - g ( i - 1 , n / p _ i ) & p _ i \mid n \end{cases} \]最后我们要的就是 \(g ( cnt , n )\)。
六、其他筛法
PN 筛,Min_25 筛,zzt 筛。。。复杂度上会更优秀。
把 negiizhao 的博客贴在 这里 备忘一下。
七、题目
去 SPOJ 做比较好。
例零:UVA11526 H(n)
- 数论分块的基本内容。
练习零:P2261 [CQOI2007]余数求和
例一:P3455 [POI2007]ZAP-Queries
- 有一道重题 P4450
练习一:P2522 [HAOI2011]Problem b
例二:P2398 GCD SUM
- 重题 P1390 公约数的和,不过稍微用一点容斥
练习二:P2257 YY的GCD
练习三:P3327 [SDOI2015]约数个数和
练习四:P4318 完全平方数
- 结合了二分的技巧
练习五:CF1139D Steps to One
- 期望与莫反结合的一道题
例五:P4213 【模板】杜教筛(Sum)
练习五:P1829 [国家集训队]Crash的数字表格 / JZPTAB
例六:P4917 天守阁的地板
练习六:P3704 [SDOI2017]数字表格
- 类似的题 P4449 于神之怒加强版,更简单一些
例七:P5495 Direchlet 前缀和
练习七:P2714 四元组统计
- 后缀和和后缀差分
练习题 A 组:
-
推导练习
\[\sum _ { i = 1 } ^ { n } \sum _ { j = 1 } ^ { m } \left[ \gcd ( i , j ) = k \right] \]\[\sum _ { i = 1 } ^ { n } \sum _ { j = 1 } ^ { m } f ( \gcd (i, j)) \] -
P2260 [清华集训2012]模积和
-
P1891 疯狂 LCM
-
P2424 约数和
-
P6810 「MCOI-02」Convex Hull 凸包
练习题 B 组:
-
P2158 [SDOI2008] 仪仗队
- 类似练习 P1447 [NOI2010] 能量采集
-
P3312 [SDOI2014]数表
-
P6222 「P6156 简单题」加强版
-
P3768 简单的数学题
-
U214268 不老不死的竹林引路人
-
P5518 [MtOI2019]幽灵乐团 / 莫比乌斯反演基础练习题
- 有卡常。
练习题 C 组:
-
T168866 无聊的题目
- Wky 送的 rqy 题。。。
-
P1587 [NOI2016] 循环之美
- 一个按照素数幂分解 DFS 的小方法
-
P4619 [SDOI2018]旧试题
-
P5572 [CmdOI2019]简单的数论题
- 一个值域平衡的技巧
- 对应练习 P4240 毒瘤之神的考验
八、附录
\(\LaTeX\) 使用表:
-
\mathrm{id} ^ 2\(\rightarrow \mathrm{id} ^ 2\) -
\zeta\(\rightarrow \zeta\) -
\sigma _ 0\(\rightarrow \sigma _ 0\) -
\varphi\(\rightarrow \varphi\) -
\varepsilon\(\rightarrow \varepsilon\) -
\sqrt[x]{n}\(\rightarrow \sqrt[x]{n}\)
九、后记
请输入文本。

浙公网安备 33010602011771号