反演学习笔记
反演学习笔记
通用反演知识
在学习之前,先要搞明白什么是反演。
笼统的讲,反演是一对双向的关系,将两个数列或函数对应起来。
举个例子,定义数列 \(B\) 是 \(A\) 的前缀和。那么显然,\(B\) 的差分就是 \(A\)。那么前缀和和差分这一对对应关系就被称作反演关系。
我们借由前缀和和差分这一对反演关系来探索反演的一些性质。
首先由于前缀和和差分都只包含加法,所以如果把 \(A\) 写成一个矩阵,那么前缀和和差分都可以写成一个矩阵的形式来对 \(A\) 进行线性变换成为 \(B\)。我们记前缀和的矩阵为 \(S\),记差分的矩阵为 \(T\)。事实上这种矩阵叫作关系矩阵。
那么有 \(A * S = B\)。如果我们同时对两边乘上 \(S^{-1}\) 呢?则有 \(A = B * S^{-1}\)。我们又知道 \(B * T = A\)。那么就有 \(S^{-1}=T\)。所以我们导出了第一个定理:两个互为反演的关系矩阵互逆。
用上面的例子验证下这个定理试试呢:
对于 \(S\) 显然有 \(S[n,i]=[i \le n]\)。对于 \(T\),显然有\(T[n,i]=1\) 当且仅当 \(i=n\),\(T[n,i]=-1\) 当且仅当 \(i=n-1\)。
那么 \((S*T)[i,j]=\sum _{k=1}^{n} S[i,k]T[k,j]=[i==j]=I\),我们发现确实是这样。
那现在我们可以用矩阵相关的东西来分析反演了。比如通过一定的线性变换使得 \(S\) 和 \(T\) 依旧互逆,那么他们也一定互为反演关系。
二项式反演
反演中最为简单的一种。
最初始的式子如下
证明的话,直接把两个矩阵乘起来看看是不是 \(I\) 就好了。定义两个矩阵分别为 \(A\),\(B\)。
发现后面的一坨即为杨辉三角奇数位与偶数位之差。在 \(i \neq j\) 的时候,为 \(0\)。当 \(i=j\) 时为 \(1\)。即为 \(I\),得证。
现在我们通过初始式子来变形得到其他的式子。
首先先考虑把 \(-1\) 的位置进行一定的移动。
则有
我们就得到了更为实用的推论。事实上大部分时候二项式反演是用来将恰好转化为钦定来解题的。
子集反演
感觉就是把二项式反演转化到了集合上而已……
先给出式子
考虑证明这个式子,从第二个式子开始往回推。
观察一下后面那一坨,用之前证明二项式反演的方法,可以发现和即为组合数奇数位的数和和偶数位的数的差。所以当且仅当 \(P=S\) 时,值为 \(1\)。得证。
当然,除了有子集版本,当然还有超集版本。但本质上和子集完全相同,甚至式子十分得有九分相似,只需要把子集符号改成超集符号。
同理,类似于二项式反演。很多题也是使用子集反演将选择子集恰好 \(S\) 的问题转化为钦定选择子集 \(S\) 的问题并加以解决。
Min-Max 容斥
还是先给出初始的式子
然而事实上这个式子一般没啥用,我们更在意类似于第 \(k\) 大的问题。
现在给出第 \(k\) 大或第 \(k\) 小的反演式子。定义 \(\max(S,k)\) 表示集合 \(S\) 中第 \(k\) 大的数。同理可得 \(min(S,k)\) 的定义。
求第 \(k\) 大的反演严格强于求最大值的反演且第 \(k\) 大和第 \(k\) 小没有本质区别,故我们只证明第 \(k\) 大的反演式的正确性。
我们大胆猜测转移系数只与集合的大小有关,那么我们考虑构造转移系数 \(f(x)\) 使得 \(\max(S,k)=\sum _{T \sube S} f(|T|) \min(T)\)。
设某个元素 \(x\) 在全集 \(S\) 中为第 \(p\) 大。当且仅当 \(T\) 只包含它和其他 \(p-1\) 个比他大的数时 \(\min(T)=x\)。所以这个数 \(x\) 在右边能做的贡献是 \(\sum _{i=1}^{p-1} \binom{p-1}{i} f(i+1)\)。需要 \(-1\) 是因为我们钦定了必须选择 \(p\)。
那么我们希望 \([p=k]=\sum _{i=1}^{p-1} \binom{p-1}{i} f(i+1)\)。为了后面推式子方便,我们对它稍作变形成为 \([p=k-1]=\sum _{i=1}^{p} \binom{p}{i} f(i+1)\)。
用上面二项式反演的式子,可以得到
则 \(f(p)=(-1)^{p-k}\binom{p-1}{k-1}\)。得证。虽然我也不知道为什么,但是所有的 Min-Max 容斥在期望意义下都是成立的。在某些计数第 \(k\) 大的数的期望题中会有妙用。
斯特林反演
首先先介绍下斯特林数吧。
第一类斯特林数
第一类斯特林数 \(s(n,k)\) 表示将 \(n\) 个两两不同的元素,划分为 \(k\) 个互不区分的非空轮换的方案数。
则有递推式 \(s(n,k)=s(n-1,k-1)+(n-1)s(n-1,k)\)。边界是 \(s(n,0)=[n=0]\)。其中 \(s(n-1,k-1)\) 表示新起一个轮换,\((n-1)s(n-1,k)\) 表示插入到其中一个轮换中去。
根据第一类斯特林数的定义,有这个恒等式
直接套定义即可证明。
第一类斯特林数和上升幂以及下降幂都有着莫大的联系
考虑使用数学归纳法证明第一个式子。已知对于所有 \(i\le n\) 已经证明 \(x^{\overline{i}}\) 成立。
现在我们已经证明了第一个式子,第二个式子可以用数学归纳法以几乎相同的化简方法证明。
第二类斯特林数
第二类斯特林数 \(S(n,k)\) 表示将 \(n\) 个两两不同的元素,划分为 \(k\) 个互不区分的非空子集的方案数。
则有递推式 \(S(n,k)=S(n-1,k-1)+k S(n-1,k)\)。边界还是 \(S(n,0)=[n=0]\)。其中 \(S(n-1,k-1)\) 表示新起一个集合,\(k S(n-1,k)\) 表示插入到其中一个集合中去。
虽然第一类斯特林数没有确定的公式,但第二类斯特林数有通项公式为
证明略,读者自证不难。虽然看着很复杂,但其实就是下面幂与第二类斯特林数的关系反演一下就是这个式子。
同第一类斯特林数一样,第二类斯特林数与整数幂也有莫大的关系。
证明也很简答,考虑 \(m^n\) 的组合意义:\(n\) 个有区别的小球放入 \(m\) 个有区别的盒子中,允许空盒。那么 \(i\) 为枚举丢进几个盒子,\(S(n,i)\) 就是第二类斯特林数的定义,\(i!\) 表示这些盒子有区分,\(\binom{m}{i}\) 表示从 \(m\) 个盒子中选 \(i\) 个。
斯特林反演
而斯特林反演形如以下式子
同二项式反演一样,我们可以稍稍挪动 \(-1\) 的位置,就有了下面的式子。
那既然我们能用 \(\le n\) 的部分反演,那么我们也能用 \(\geq n\) 的部分反演,式子如下。
当然我们可以把 \(-1\) 随意挪动咯。
用之前的所说的方法,只要我们分析了关系矩阵互逆,就能证明这两个式子。
即为我们想证明 \(\sum _{k=m}^n (-1)^{n-k} s(n,k)S(k,m)=[m=n]\) 和 \(\sum _{k=m}^n (-1)^{n-k} S(n,k)s(k,m)=[m=n]\)。
前面一个式子是为了证明 \(\le n\) 的反演成立,后面的式子是为了证明 \(\geq n\) 的反演成立。
先证明前面的式子
第二个用同样的方法,将整数幂代换为第二类斯特林数和下降幂的积的形式,再将下降幂代替为第一类斯特林数,就能证明。至此我们已经证明了 \(4\) 种斯特林反演的正确性。
顺便提一句,广义斯特林数定义了负整数意义下的第一类,第二类斯特林数。我们惊奇的发现有 \(S(n,m)=s(-m,-n)\) 以及 \(s(n,m)=S(-m,-n)\)。证明我不会,我太菜了。
莫比乌斯反演
狄利克雷卷积与积性函数
莫比乌斯反演一般用于数论函数,所以它与狄利克雷卷积有着莫大的关系。
首先定义一下数论函数,就我们所需要学习的知识来说,我们可以简单的认为,数论函数就是定义域为正整数域 \(\mathbb{Z^+}\) 上的函数。
我们定义狄利克雷卷积是对于两个数论函数的卷积,其结果仍是一个数论函数。写作 \(h=f*g\) 且有 \(h(n)=\sum_{xy=n}f(x)g(y)\)。不过一般我们不这样写,为方便化简,我们一般写作 \(h(n)=\sum_{d|n}f(d)g(n/d)\)。
现在我们定义了一种运算,自然要探讨其运算律。
首先狄利克雷卷积满足交换律,即 \(f*g=g*f\)。证明显然,不多赘述。
同时狄利克雷卷积满足结合律,即 \(a=(f*g)*h=f*(g*h)\)。证明就是考虑 \(a(n)=\sum_{xyz=n}f(x)g(y)h(z)\),这个与运算顺序无关,所以结合律成立。
当然,分配律也是成立的,即为 \((f+g)*h=f*h+g*h\)。证明同上,把结果等于什么写出来即可证明。
最为重要的,狄利克雷卷积还有一个奇怪的性质:\(f=g\) 的充要条件为 \(f*h=g*h\),其中 \(h\) 要满足 \(h(1) \neq 0\)。证明显然,还是直接暴拆狄利克雷卷积然后归纳法证明就好了。
现在我们讨论了狄利克雷卷积的运算性质,我们还需要讨论一些必要的简单的元。
单位元/元函数:通常记作 \(\epsilon\),当且仅当 \(n=1\) 时有 \(\epsilon(n)=1\),其余的值全是0。顾名思义,对于任意数论函数 \(f\) 都有 \(\epsilon * f=f\)。带入证明即可。
恒等函数:通常记作 \(I\)。对于任意 \(x \in \mathbb{Z^+}\) 都有 \(I(x)=1\)。
单位函数:通常记作 \(id\)。对于任意 \(x \in \mathbb{Z^+}\) 都有 \(id(x)=x\)。
既然我们找到了一些函数,自然我们要讨论函数的性质。我们引入一个新的性质 积性。
我们定义一个数论函数 \(F\) 是积性的,当且仅当对于任意 \(a,b\) 满足 \(\gcd(a,b)=1\) 都有 \(F(ab)=F(a)F(b)\)。
我们考虑一个比积性更加强的性质 完全积性。其定义为对于一个数论函数 \(F\),对于任意 \(a,b\) 都有 \(F(ab)=F(a)F(b)\),则我们称这个函数为完全积性函数。显然完全积性函数都是积性函数。
当然根据定义,不论是恒等函数,元函数还是常数函数,他们都是积性函数。现在我们来讨论一下积性函数的一些通用性质。
首先对于任意积性函数 \(F\) 都有 \(F(1)=1\) 或 \(F(1)=0\)。证明就是考虑带入 \(a=b=1\),则 \(F(1)=F(1)F(1)\)。然而如果 \(F(1)=0\) 且 \(F\) 是积性函数,那么 \(F\) 的每一项都为 \(0\),丧失了任何的讨论意义,故下面只要没有特殊说明,我们都讨论 \(F \neq 0\) 的积性函数。
其次,我们还可以得到对于一个积性函数 \(F\),有 \(F(x)=F(p_1^{c_1})F(p_2^{c_2})\dots F(p_k^{c_k})\)。其中 \(x=\prod p_i^{c_i}\) 且 \(p_i\) 都是质数。证明显然,根据定义就可以知道。
事实上有很多的常用数论函数都是积性函数,例如:元函数 \(\epsilon\),恒等函数 \(I\),单位函数 \(id\),欧拉函数 \(\varphi\),莫比乌斯函数 \(\mu\) 等等。
现在我们讨论了狄利克雷卷积和积性函数分别的性质,把它们结合起来呢?
定理:两个积性函数的狄利克雷卷积依旧是积性函数。
假设有两个积性函数 \(f,g\),定义 \(h=f*g\)。我们想证明的就是 \(h\) 同样是积性函数。对于任意 \(a,b\) 满足 \(\gcd(a,b)=1\) 都有
那么我们就说明了对于两个积性函数的积是积性函数。那如果一个 \(f(1)\neq 0\) 积性函数和一个普通数论函数的狄利克雷卷积是积性函数,能否说明这个数论函数也是积性函数呢?答案是肯定的,不过我们得先引入一下数论函数在狄利克雷卷积意义下的逆元。
对于一个函数 \(f\),如果存在 \(g\),满足 \(f*g=\epsilon\),则我们称 \(g\) 是 \(f\) 的逆元,一般写作 \(f^{-1}\)。
首先我们先讨论逆元的存在性,对于所有 \(f(1)\neq0\) 的数论函数 \(f\),都存在逆元 \(f^{-1}\)。由上面奇怪的性质可以得到逆元是唯一的。
现在我们来讨论如何计算逆元。和上面奇怪的性质的证明差不多,考虑已经计算出了 \(i < x\) 的所有 \(i\) 的 \(f^{-1}(i)\) 那么我们可以用已知的信息推出 \(f^{-1}(x)\) 的值。
我们已经知道了逆元的存在性,唯一性以及逆元的构造方法了。
定理:一个积性函数的逆元也是积性函数。证明如下。
考虑积性函数 \(f\),我们令他的逆元为 \(g\)。用数学归纳法证明。首先对于 \(nm=1\) 的情况是平凡的,显然成立。若 \(nm>1\) 且 \(\gcd(n,m)=1\),我们考虑已经证明 \(xy<nm\) 的所有位置了,既对于所有 \(\gcd(x,y)=1\) 且 \(xy<nm\) 的 \(x,y\) 都有 \(g(xy)=g(x)g(y)\)。那么有以下式子
那么我们就用归纳法证明了 \(g\) 也就是 \(f^{-1}\) 是积性函数了。
回到原问题,我们假设有积性函数 \(f,g\) 满足\(f \neq 0\),以及一个数论函数 \(h\),有 \(f*h=g\)。我们需要证明 \(h\) 也是一个积性函数。我们把两边同时乘上 \(f^{-1}\),得到\(f*h*f^{-1}=g*f^{-1}\),通过交换律可以得到 \(h=g*f^{-1}\)。由于两积性函数的狄利克雷卷积依旧是积性的,所以 \(h\) 是积性函数。
现在我们已经对狄利克雷卷积以及积性函数有了一点点了解了,我们来讨论一些非常特殊的积性函数。
莫比乌斯函数 \(\mu\)
我们先考虑最基础的狄利克雷卷积,也就是 \(g=f*I\)。先考虑如果给定 \(f\),那我们可以 \(O(n\ln n)\) 的暴力计算 \(g\),当然也可以用高为前缀和做到 \(O(n \ln\ln n)\) 的复杂度。但这不重要,因为通过 \(f\) 求 \(g\) 是朴素的。那假如说我们是知道 \(g\) 求 \(f\) 呢?根据狄利克雷卷积的运算性质,我们知道 \(f=g*I^{-1}\)。事实上 \(\mu\) 就是这么来的,即 \(\mu * I=\epsilon\)。
首先我们定义以下 \(\mu\)。
既然已经定义好了 \(\mu\),我们来探讨下它的性质。
首先根据 \(\mu\) 是怎么来的,我们有 \(\mu * I=\epsilon\),证明如下
我们令 \(n=\prod_{i=0}^k p_i^{c_i},n'=\prod p_i\)。
上面的式子当且仅当 \(k=0\) 才有值。\(k=0\) 即 \(n=1\)。故 \(\mu *I=[n=1]=\epsilon\)。证毕。
现在我们已经知道了一个重要的结论 \(\mu * I=\epsilon\)。它可以带给我们两个较为简单的式子,第一个式子就是引入 \(\mu\) 时使用的式子。第二个式子就比较特殊了,它是倍数求和的反演式
当然我们可以对这个式子进行稍稍的变形,以方便我们的证明。
证明其实很简单,如下
然而事实上这两个反演式子都没有下面这个式子用处大
证明显然,直接将 \([\gcd(i,j)=1]\) 代换成 \(\epsilon(\gcd(i,j))\) 即可。
有关求 \(\mu\) 的部分,这里不多赘述。
大多数时候,题目中出现了 \(\gcd(i,j)\) 我们都能通过莫比乌斯反演将其转变为枚举 \(d=\gcd(i,j)\) 通过统计合法的 \(i,j\) 对数以达到解决原题的目的。
欧拉函数 \(\varphi\)
先给出欧拉函数 \(\varphi\) 的定义。\(\varphi(n)\) 即为小于等于 \(n\) 的数中与 \(n\) 互质的数的个数。首先先给出 \(\varphi\) 的通项公式。设 \(n=\prod p_i^{c_i}\) 则有 \(\varphi(n)=n\prod(1-\frac{1}{p})\)。证明很简单,不会的可以看蓝书。
上面讲积性函数的时候就提到了,\(\varphi\) 是一个积性函数。证明很简单,考虑任意互质的数 \(a,b\),由于他们互质,所以他们分解质因数后当然没有任何共同质数,自然 \(\varphi(ab)=\varphi(a)\varphi(b)\)。
暴力求一个数的 \(\varphi(n)\) 是 \(O(\sqrt{n})\) 的。如果我们需要线性的求出对于 \(1\le x\le n\) 的所有 \(\varphi(x)\),那就需要使用线性筛了,这里不多赘述。
定理:\(\sum_{i=1}^n\sum_{j=1}^n[\gcd(i,j)=1]=2\sum_{i=1}^n\varphi(i)-1\)。证明如下
考虑把左边的式子砍一半 \(\sum_{i=1}^n\sum_{j=1}^i[\gcd(i,j)=1]\),这个式子的值即为 \(\sum_{i=1}^n \varphi(i)\)。由于直接 \(\times 2\) 会使得 \(i=1,j=1\) 的情况算两遍,故需要 \(-1\)。
事实上有些用莫比乌斯反演做的题,能使用欧拉函数的性质达到算法复杂度更低的目的。现在我们从狄利克雷卷积的视角来考察欧拉函数的性质。
首先有一个和 \(\varphi\) 的与 \(\mu * I = \epsilon\) 同等重要的式子 \(\varphi * I =id\)。换句话说就是 \(n=\sum_{d|n}\varphi(d)\)。由于 \(id\) 是个积性函数,所以我们只需要证明 \(n=p^c\),其中 \(p\) 为质数即可。
考虑 \(n=p^c\),则 \(n=\sum_{i=0}^c \varphi(p^i)\)。由于 \(\varphi(p^i)=(p-1)p^{i-1}\)。所以其实后面的求和是一个等比数列求和,其结果就是 \(p^c\)。故我们证明了 \(\varphi * I =id\)。
事实上由于 \(I^{-1}=\mu\),这个式子还可以进行进一步变形,变为 \(\varphi = id * \mu\)。这个式子就即为的有用了,因为同上面所说,大部分有 \(\gcd(i,j)\) 的题我们通常会选择枚举 \(d=\gcd(i,j)\) 然后统计 \(i,j\) 对数的方法来解决,这个时候很可能就会出现形如 \(id * \mu\) 的式子,我们就可以将其转化为 \(\varphi\)。
这样说还是有点太抽象了,不如来举个例子。现在我们要计算 \(\sum_{i=1}^n\sum_{j=1}^m\gcd(i,j)\)。我们事先规定,下列的式子中所有除法都表示整除的结果。
用莫比乌斯反演,则有
这个东西就可以直接数论分块做了。我们发现我们巧用 \(id * \mu=\varphi\) 把这道题做完了。
约数个数函数
还是先给出定义,除数函数 \(d(n)\) 表示 \(n\) 的约数个数。还是把通项公式给一下,设 \(n=\prod p_i^{c_i}\),则有 \(d(n)=\prod (c_i+1)\)。证明显然,乘法原理,每个质数 \(p_i\) 有 \(c_i+1\) 种不同选择,乘一起就是了。
我们仔细看一下狄利克雷卷积的式子,他是通过枚举因数来卷起来的,这不正好和约束个数联系起来了嘛。所以我们有 \(d=I*I\)。证明显然,定义就是这样的啊。
约数的和函数
顾名思义,约数的和函数 \(\sigma(n)\) 表示 \(n\) 的所有约数的和。和上面完全一样,既然狄利克雷卷积枚举了约数,那约数和就是把 \(I\) 变为 \(id\) 而已。故 \(\sigma=I*id\)。
单位根反演
单位根反演的核心式子如下
证明很简单,分类讨论。若 \(n|k\),则所有 \(\omega_n^{ik}\) 都为 \(1\),自然和为 \(n\),成立。若 \(n\nmid k\),则这是个等比数列求和,其结果为 \(\frac{\omega_n^{kn}-1}{n(\omega_n^k-1)}=0\)。故原式成立。

浙公网安备 33010602011771号