浅谈各种反演

前言 (chě dàn)

反演好神奇啊
就像 膜 魔法一样
在这里插入图片描述

反演在OI界还是一个非常常用的一个东西,觉得还是写个总结好一点

前置知识

二项式定理 : (证明可通过数学归纳法)
在这里插入图片描述

正文

定义

何为反演 ?
我是通俗理解为已知 A 求 B为正演, 那已知 B 求 A为反演

在OI中一般 A, B为函数,如f(x), g(x)之类的

引入

先通过一个例题引入

有 n 个人站成一排, 编号为1, 2, 3, …, n, 假设编号为i的不能站在第i个位置,求可行的方案数 (经典的错排问题)

首先作为一个初中生,当然可以想到容斥

在这里插入图片描述

为什么这个公式是成立的
考虑要算m(m >= 1)个人站对的情况, 算0 ~ m-1个人的时候会将当前m个人的方案多算这么多次
在这里插入图片描述

既然是负的,加回去就好了,于是容斥公式成立

另一个角度

设 f ( n ) 为 n 个 人 随 便 站 的 方 案 数 , g ( n ) 为 n 个 人 错 排 的 方 案 数 , 我 们 可 以 枚 举 有 几 个 人 站 错 , 可 得 设f(n)为n个人随便站的方案数,g(n)为n个人错排的方案数,我们可以枚举有几个人站错,可得 设f(n)为n个人随便站的方案数,g(n)为n个人错排的方案数,我们可以枚举有几个人站错,可得

在这里插入图片描述
这个就是正演
但是我们好像只知道 f ( n ) f(n) f(n),于是我们需要反演求出 g ( n ) g(n) g(n)

各种反演

开始前先看一些性质

上面设的那个东西
在这里插入图片描述

前面推容斥的时候有一步是要用

∑ k = 0 n ( − 1 ) k ( n k ) = ( 1 + ( − 1 ) ) n = 0 n \Large \sum\limits_{k=0}^n(-1)^k \begin{pmatrix} n \\ k \end{pmatrix} = (1 + (-1))^n=0^n k=0∑n​(−1)k⎝⎛​nk​⎠⎞​=(1+(−1))n=0n

当n=0时值为1,否则为0
即
∑ k = 0 n ( − 1 ) k ( n k ) = [ n = = 0 ] … … ( 1 ) \Large \sum\limits_{k=0}^n(-1)^k \begin{pmatrix} n \\ k \end{pmatrix} = [n==0]…… (1) k=0∑n​(−1)k⎝⎛​nk​⎠⎞​=[n==0]……(1)

首先知道一个显然的东西
g ( n ) = ∑ m = 0 n [ n − m = = 0 ] ( n m ) g ( m ) \large g(n)=\sum\limits_{m=0}^n[n-m==0]\begin{pmatrix} n \\ m \end{pmatrix}g(m) g(n)=m=0∑n​[n−m==0](nm​)g(m)

前面提到的性质
∑ k = 0 n ( − 1 ) k ( n k ) = [ n = = 0 ] … … ( 1 ) \large \sum\limits_{k=0}^n(-1)^k \begin{pmatrix} n \\ k \end{pmatrix} = [n==0]…… (1) k=0∑n​(−1)k(nk​)=[n==0]……(1)
把它带进去

g ( n ) = ∑ m = 0 n ∑ k = 0 n − m ( − 1 ) k ( n − m k ) ( n m ) g ( m ) \large g(n)=\sum\limits_{m=0}^n\sum\limits_{k=0}^{n-m}(-1)^k \begin{pmatrix} n-m \\ k \end{pmatrix}\begin{pmatrix} n \\ m \end{pmatrix}g(m) g(n)=m=0∑n​k=0∑n−m​(−1)k(n−mk​)(nm​)g(m)
注 意 到 ( n − m k ) ( n m ) 的 意 思 时 从 大 小 为 n 的 集 合 中 先 取 m 个 , 再 从 剩 下 的 中 取 k 个 的 方 案 数 注意到\begin{pmatrix} n-m \\ k \end{pmatrix}\begin{pmatrix} n \\ m \end{pmatrix}的意思时从大小为n的集合中先取m个,再从剩下的中取k个的方案数 注意到(n−mk​)(nm​)的意思时从大小为n的集合中先取m个,再从剩下的中取k个的方案数 , 和 先 取 k 个 , 再 从 剩 下 的 当 中 取 m 个 的 方 案 数 相 同 ( n − k m ) ( n k ) ,和先取k个,再从剩下的当中取m个的方案数相同\begin{pmatrix} n-k \\ m \end{pmatrix}\begin{pmatrix} n \\ k \end{pmatrix} ,和先取k个,再从剩下的当中取m个的方案数相同(n−km​)(nk​)
   g ( n ) = ∑ m = 0 n ∑ k = 0 n − m ( − 1 ) k ( n − m k ) ( n m ) g ( m ) \ \ \large g(n)=\sum\limits_{m=0}^n\sum\limits_{k=0}^{n-m}(-1)^k \begin{pmatrix} n-m \\ k \end{pmatrix}\begin{pmatrix} n \\ m \end{pmatrix}g(m)   g(n)=m=0∑n​k=0∑n−m​(−1)k(n−mk​)(nm​)g(m)

= g ( n ) = ∑ m = 0 n ∑ k = 0 n − m ( − 1 ) k ( n − k m ) ( n k ) g ( m ) \large g(n)=\sum\limits_{m=0}^n\sum\limits_{k=0}^{n-m}(-1)^k \begin{pmatrix} n-k \\ m \end{pmatrix}\begin{pmatrix} n \\ k \end{pmatrix}g(m) g(n)=m=0∑n​k=0∑n−m​(−1)k(n−km​)(nk​)g(m)
交换求和符号

g ( n ) = ∑ k = 0 n ( − 1 ) k ( n k ) ∑ m = 0 n − k ( n − k m ) g ( m ) \large g(n)=\sum\limits_{k=0}^{n}(-1)^k \begin{pmatrix} n \\ k \end{pmatrix}\sum\limits_{m=0}^{n-k}\begin{pmatrix} n-k \\ m \end{pmatrix}g(m) g(n)=k=0∑n​(−1)k(nk​)m=0∑n−k​(n−km​)g(m)

然后我们发现一个很棒的东西
∑ m = 0 n − k ( n − k m ) g ( m ) = f ( n − k ) \large \sum\limits_{m=0}^{n-k}\begin{pmatrix} n-k \\ m \end{pmatrix}g(m) = f(n-k) m=0∑n−k​(n−km​)g(m)=f(n−k)
所以
g ( n ) = ∑ k = 0 n ( − 1 ) k ( n k ) ∑ m = 0 n − k ( n − k m ) g ( m ) \large g(n)=\sum\limits_{k=0}^{n}(-1)^k \begin{pmatrix} n \\ k \end{pmatrix}\sum\limits_{m=0}^{n-k}\begin{pmatrix} n-k \\ m \end{pmatrix}g(m) g(n)=k=0∑n​(−1)k(nk​)m=0∑n−k​(n−km​)g(m)
         = ∑ k = 0 n ( − 1 ) k ( n k ) f ( n − k ) \large \ \ \ \ \ \ \ \ = \sum\limits_{k=0}^{n}(-1)^k \begin{pmatrix} n \\ k \end{pmatrix} f(n-k)         =k=0∑n​(−1)k(nk​)f(n−k)

换一下下标
因为 ( n n − k ) = ( n k ) \begin{pmatrix} n \\ n- k \end{pmatrix} = \begin{pmatrix} n \\ k \end{pmatrix} (nn−k​)=(nk​)
g ( n ) = ∑ k = 0 n ( − 1 ) n − k ( n k ) f ( k ) … … ( 2 ) \large g(n) = \sum\limits_{k=0}^{n}(-1)^{n-k} \begin{pmatrix} n \\ k \end{pmatrix} f(k) …… (2) g(n)=k=0∑n​(−1)n−k(nk​)f(k)……(2)

二项式反演

先直接给出公式
已知
f ( n ) = ∑ k = 0 n ( n k ) g ( k ) \Large f(n)= \sum\limits_{k=0}^n\begin{pmatrix} n \\ k \end{pmatrix}g(k) f(n)=k=0∑n​⎝⎛​nk​⎠⎞​g(k)
可得
g ( n ) = ∑ k = 0 n ( − 1 ) n − k ( n k ) f ( k ) \Large g(n)=\sum\limits_{k=0}^n(-1)^{n-k} \begin{pmatrix} n \\ k \end{pmatrix}f(k) g(n)=k=0∑n​(−1)n−k⎝⎛​nk​⎠⎞​f(k)
一般写成

f ( n ) = ∑ k = 0 n ( n k ) g ( k ) ⇔ g ( n ) = ∑ k = 0 n ( − 1 ) n − k ( n k ) f ( k ) \Large f(n)= \sum\limits_{k=0}^n\begin{pmatrix} n \\ k \end{pmatrix}g(k) ⇔ \Large g(n)=\sum\limits_{k=0}^n(-1)^{n-k} \begin{pmatrix} n \\ k \end{pmatrix}f(k) f(n)=k=0∑n​⎝⎛​nk​⎠⎞​g(k)⇔g(n)=k=0∑n​(−1)n−k⎝⎛​nk​⎠⎞​f(k)

发现和上面的2一样诶
那就不用证了 (笑)

还有另外一个公式

f ( n ) = ∑ k = 0 n ( − 1 ) k ( n k ) g ( k ) ⇔ g ( n ) = ∑ k = 0 n ( − 1 ) k ( n k ) f ( k ) \Large f(n)=\sum\limits_{k=0}^n(-1)^{k} \begin{pmatrix} n \\ k \end{pmatrix}g(k)⇔g(n)=\sum\limits_{k=0}^n(-1)^{k} \begin{pmatrix} n \\ k \end{pmatrix}f(k) f(n)=k=0∑n​(−1)k⎝⎛​nk​⎠⎞​g(k)⇔g(n)=k=0∑n​(−1)k⎝⎛​nk​⎠⎞​f(k)
这个东西看起来十分对称,非常好记
它的证明也很简单 根据容斥证明就好了

另外有一个更常用的公式

f ( n ) = ∑ k = n m ( k n ) g ( k ) ⇔ g ( n ) = ∑ k = n m ( − 1 ) k − n ( k n ) f ( k ) \Large f(n)= \sum\limits_{k=n}^m\begin{pmatrix} k \\ n \end{pmatrix}g(k) ⇔ \Large g(n)=\sum\limits_{k=n}^m(-1)^{k-n} \begin{pmatrix} k \\ n \end{pmatrix}f(k) f(n)=k=n∑m​⎝⎛​kn​⎠⎞​g(k)⇔g(n)=k=n∑m​(−1)k−n⎝⎛​kn​⎠⎞​f(k)

证明

把右边的代入左边
f ( n ) = ∑ k = n m ( k n ) g ( k ) f(n)= \sum\limits_{k=n}^m\begin{pmatrix} k \\ n \end{pmatrix}g(k) f(n)=k=n∑m​(kn​)g(k)
          = ∑ k = n m ( k n ) ∑ j = k m ( j k ) ( − 1 ) j − k f ( j ) \ \ \ \ \ \ \ \ \ = \sum\limits_{k=n}^m\begin{pmatrix} k \\ n \end{pmatrix} \sum\limits_{j=k}^m\begin{pmatrix} j \\ k \end{pmatrix}(-1)^{j-k}f(j)          =k=n∑m​(kn​)j=k∑m​(jk​)(−1)j−kf(j)
          = ∑ j = n m f ( j ) ∑ k = n j ( k n ) ( j k ) ( − 1 ) j − k \ \ \ \ \ \ \ \ \ =\sum\limits_{j=n}^m f(j)\sum\limits_{k=n}^j\begin{pmatrix} k \\ n \end{pmatrix}\begin{pmatrix} j \\ k \end{pmatrix}(-1)^{j-k}          =j=n∑m​f(j)k=n∑j​(kn​)(jk​)(−1)j−k

注 意 到 ( j k ) ( k n ) 的 意 思 时 从 大 小 为 j 的 集 合 中 先 取 k 个 , 再 从 取 的 k 个 中 取 n 个 的 方 案 数 注意到\begin{pmatrix} j \\ k \end{pmatrix}\begin{pmatrix} k \\ n \end{pmatrix}的意思时从大小为j的集合中先取k个,再从取的k个中取n个的方案数 注意到(jk​)(kn​)的意思时从大小为j的集合中先取k个,再从取的k个中取n个的方案数 , 和 先 取 n 个 , 再 从 剩 下 j − n 的 当 中 取 k − n 个 的 方 案 数 相 同 ( j n ) ( j − n k − n ) ,和先取n个,再从剩下j-n的当中取k-n个的方案数相同\begin{pmatrix} j \\ n \end{pmatrix}\begin{pmatrix} j-n \\ k-n \end{pmatrix} ,和先取n个,再从剩下j−n的当中取k−n个的方案数相同(jn​)(j−nk−n​)
因 为 ( j − n k − n ) = ( j − n j − n − ( k − n ) ) = ( j − n j − k ) 因为\begin{pmatrix} j-n \\ k-n \end{pmatrix} = \begin{pmatrix} j-n \\ j - n -(k-n) \end{pmatrix}=\begin{pmatrix} j-n \\ j-k \end{pmatrix} 因为(j−nk−n​)=(j−nj−n−(k−n)​)=(j−nj−k​)
f ( n ) = ∑ j = n m f ( j ) ∑ k = n j ( j n ) ( j − n j − k ) ( − 1 ) j − k f(n)=\sum\limits_{j=n}^m f(j)\sum\limits_{k=n}^j\begin{pmatrix} j \\ n \end{pmatrix}\begin{pmatrix} j-n \\ j-k \end{pmatrix}(-1)^{j-k} f(n)=j=n∑m​f(j)k=n∑j​(jn​)(j−nj−k​)(−1)j−k
          = ∑ j = n m ( j n ) f ( j ) ∑ k = n j ( j − n j − k ) ( − 1 ) j − k \ \ \ \ \ \ \ \ \ =\sum\limits_{j=n}^m \begin{pmatrix} j \\ n \end{pmatrix}f(j)\sum\limits_{k=n}^j\begin{pmatrix} j-n \\ j - k \end{pmatrix}(-1)^{j-k}          =j=n∑m​(jn​)f(j)k=n∑j​(j−nj−k​)(−1)j−k
设 t = j - k
          = ∑ j = n m ( j n ) f ( j ) ∑ t = 0 j − n ( j − n t ) ( − 1 ) t \ \ \ \ \ \ \ \ \ =\sum\limits_{j=n}^m \begin{pmatrix} j \\ n \end{pmatrix}f(j)\sum\limits_{t=0}^{j-n}\begin{pmatrix} j-n \\ t \end{pmatrix}(-1)^{t}          =j=n∑m​(jn​)f(j)t=0∑j−n​(j−nt​)(−1)t
看看右边那个东西,发现是不是有点眼熟

就是性质1
∑ k = 0 n ( − 1 ) k ( n k ) = [ n = = 0 ] … … ( 1 ) \large \sum\limits_{k=0}^n(-1)^k \begin{pmatrix} n \\ k \end{pmatrix} = [n==0]…… (1) k=0∑n​(−1)k(nk​)=[n==0]……(1)

f ( n ) = ∑ j = n m ( j n ) f ( j ) [ j − n = = 0 ] f(n)=\sum\limits_{j=n}^m \begin{pmatrix} j \\ n \end{pmatrix}f(j)[j-n==0] f(n)=j=n∑m​(jn​)f(j)[j−n==0]
即
f ( n ) = ∑ j = n m ( j n ) f ( j ) [ j = = n ] f(n)=\sum\limits_{j=n}^m \begin{pmatrix} j \\ n \end{pmatrix}f(j)[j==n] f(n)=j=n∑m​(jn​)f(j)[j==n]
f ( n ) = ( n n ) f ( n ) [ n = = n ] f(n)=\begin{pmatrix} n \\ n \end{pmatrix}f(n)[n==n] f(n)=(nn​)f(n)[n==n]
f ( n ) = f ( n ) f(n)=f(n) f(n)=f(n)
得证

一般的用法:

f(n)为先钦定n个,然后剩下随便搞的方案数(肯定会算重复) (不是简单的后缀和,而是先钦定n个的所有情况,然后剩下随便搞的和)
g(n)为恰好n个
显然
f ( n ) = ∑ k = n m ( k n ) g ( k ) \Large f(n)= \sum\limits_{k=n}^m\begin{pmatrix} k \\ n \end{pmatrix}g(k) f(n)=k=n∑m​⎝⎛​kn​⎠⎞​g(k)
一般 f ( n ) f(n) f(n)是很容易算的,那么
g ( n ) = ∑ k = n m ( − 1 ) k − n ( k n ) f ( k ) \Large g(n)=\sum\limits_{k=n}^m(-1)^{k-n} \begin{pmatrix} k \\ n \end{pmatrix}f(k) g(n)=k=n∑m​(−1)k−n⎝⎛​kn​⎠⎞​f(k)

莫比乌斯反演

f ( n ) = ∑ d ∣ n g ( d ) ⇔ g ( n ) = ∑ d ∣ n μ ( d ) f ( n / d ) \Large f(n)=\sum\limits_{d|n}g(d)⇔g(n)=\sum\limits_{d|n}\mu (d)f(n/d) f(n)=d∣n∑​g(d)⇔g(n)=d∣n∑​μ(d)f(n/d)

前置知识

首先要知道 μ \mu μ是个什么函数
若 d = 1 , μ ( d ) = 1 若d = 1, \mu(d) = 1 若d=1,μ(d)=1
若 d = p 1 ∗ p 2 ∗ p 3 ∗ . . . . ∗ p k , 其 中 p 为 质 数 且 互 不 相 同 , 那 么 μ ( d ) = ( − 1 ) k 若d=p_1 * p_2 * p_3 * .... * p_k, 其中p为质数且互不相同,那么 \mu(d) = (-1)^k 若d=p1​∗p2​∗p3​∗....∗pk​,其中p为质数且互不相同,那么μ(d)=(−1)k
其 他 情 况 μ ( d ) = 0 其他情况 \mu(d) = 0 其他情况μ(d)=0

μ \mu μ 的一些性质

首先它是一个积性函数
就是若 a, b互质
则满足 μ ( a b ) = μ ( a ) μ ( b ) \large \mu(ab)=\mu(a)\mu(b) μ(ab)=μ(a)μ(b)
证明很显然啊
然后就可以线性筛了

还有一个很重要的性质
∑ d ∣ n μ ( d ) = [ n = = 1 ] \large \sum\limits_{d|n}\mu(d) =[n==1] d∣n∑​μ(d)=[n==1]
这个证明也很显然,先把n质因数分解,去掉重复的质因数
假设为 p 1 , p 2 , . . . . , p m p_1,p_2, ...., p_m p1​,p2​,....,pm​

上面那条式子就等价于 ∑ k = 0 m ( − 1 ) k ( m k ) \sum\limits_{k=0}^m(-1)^k\begin{pmatrix} m \\ k \end{pmatrix} k=0∑m​(−1)k(mk​)
这条式子是不是有点熟悉, 就是上面的性质1
∑ k = 0 n ( − 1 ) k ( n k ) = [ n = = 0 ] … … ( 1 ) \sum\limits_{k=0}^n(-1)^k \begin{pmatrix} n \\ k \end{pmatrix} = [n==0]…… (1) k=0∑n​(−1)k(nk​)=[n==0]……(1)
所以
∑ k = 0 m ( − 1 ) k ( m k ) = [ m = = 0 ] \sum\limits_{k=0}^m(-1)^k\begin{pmatrix} m \\ k \end{pmatrix}=[m==0] k=0∑m​(−1)k(mk​)=[m==0]

m = = 0 的 时 候 n 只 能 为 1 m==0的时候n只能为1 m==0的时候n只能为1
所以成立

证明

让我们回忆我们证明二项式反演的时候干了什么?
找了个n=0时才为1的东西,然后搞了个显然的东西,把前一个带入后面一个就搞出了反演

类似的我们可以搞一搞

∑ d ∣ n μ ( d ) = [ n = = 1 ] \large \sum\limits_{d|n}\mu(d) =[n==1] d∣n∑​μ(d)=[n==1]
显然的
g ( n ) = ∑ m ∣ n [ n m = = 1 ] g ( m ) \large g(n)=\sum\limits_{m|n}[\frac{n}{m}==1]g(m) g(n)=m∣n∑​[mn​==1]g(m)
把上面的代入下面
g ( n ) = ∑ m ∣ n ∑ d ∣ n m μ ( d ) g ( m ) g(n)=\sum\limits_{m|n}\sum\limits_{d|\frac{n}{m}}\mu(d) g(m) g(n)=m∣n∑​d∣mn​∑​μ(d)g(m)

注意到 d ∣ n m 就 是 m d ∣ n 和 m ∣ n d d|\frac{n}{m}就是md|n和m|\frac{n}{d} d∣mn​就是md∣n和m∣dn​是等价的
所以
g ( n ) = ∑ m ∣ n ∑ m ∣ n d μ ( d ) g ( m ) g(n)=\sum\limits_{m|n}\sum\limits_{m|\frac{n}{d}}\mu(d) g(m) g(n)=m∣n∑​m∣dn​∑​μ(d)g(m)
同样交换求和符号
g ( n ) = ∑ d ∣ n μ ( d ) ∑ m ∣ n d g ( m ) g(n)=\sum\limits_{d|n}\mu(d) \sum\limits_{m|\frac{n}{d}} g(m) g(n)=d∣n∑​μ(d)m∣dn​∑​g(m)
右边那个东西是不是有点熟悉
就是 f ( n ) = ∑ d ∣ n g ( d ) f(n)=\sum\limits_{d|n}g(d) f(n)=d∣n∑​g(d)
所以
g ( n ) = ∑ d ∣ n μ ( d ) f ( n / d ) g(n) =\sum\limits_{d|n}\mu(d)f(n/d) g(n)=d∣n∑​μ(d)f(n/d)

证毕

另一种形式

f ( n ) = ∑ n ∣ d g ( d ) ⇔ g ( n ) = ∑ n ∣ d μ ( d / n ) f ( d ) \Large f(n)=\sum\limits_{n|d}g(d)⇔g(n)=\sum\limits_{n|d}\mu (d/n)f(d) f(n)=n∣d∑​g(d)⇔g(n)=n∣d∑​μ(d/n)f(d)
类比二项式反演的证明
把右边的代入左边
f ( n ) = ∑ n ∣ d g ( d ) f(n)=\sum\limits_{n|d}g(d) f(n)=n∣d∑​g(d)

          = ∑ n ∣ d ∑ d ∣ m μ ( m / d ) f ( m ) \ \ \ \ \ \ \ \ \ =\sum\limits_{n|d}\sum\limits_{d|m}\mu (m/d)f(m)          =n∣d∑​d∣m∑​μ(m/d)f(m)
          = ∑ n ∣ m ∑ t ∣ m n m / n μ ( m / t n ) f ( m ) \ \ \ \ \ \ \ \ \ =\sum\limits_{n|m}\sum\limits_{t|\frac{m}{n}}^{m/n}\mu (m/tn)f(m)          =n∣m∑​t∣nm​∑m/n​μ(m/tn)f(m)
设 m / n = T m/n=T m/n=T
f ( n ) = ∑ n ∣ m ∑ t ∣ m n T μ ( T / t ) f ( m ) f(n) =\sum\limits_{n|m}\sum\limits_{t|\frac{m}{n}}^{T}\mu (T/t)f(m) f(n)=n∣m∑​t∣nm​∑T​μ(T/t)f(m)
          = ∑ n ∣ m f ( m ) ∑ t ∣ T T μ ( T / t ) \ \ \ \ \ \ \ \ \ =\sum\limits_{n|m}f(m)\sum\limits_{t|T}^{T}\mu (T/t)          =n∣m∑​f(m)t∣T∑T​μ(T/t)

可以很容易发现
∑ t ∣ T T μ ( T / t ) = ∑ t ∣ T T μ ( t ) \sum\limits_{t|T}^{T}\mu (T/t)=\sum\limits_{t|T}^{T}\mu (t) t∣T∑T​μ(T/t)=t∣T∑T​μ(t)
f ( n ) = ∑ n ∣ m f ( m ) ∑ t ∣ T T μ ( t ) f(n) =\sum\limits_{n|m}f(m)\sum\limits_{t|T}^{T}\mu (t) f(n)=n∣m∑​f(m)t∣T∑T​μ(t)
右边那个东西是不是又很熟悉
∑ d ∣ n μ ( d ) = [ n = = 1 ] \large \sum\limits_{d|n}\mu(d) =[n==1] d∣n∑​μ(d)=[n==1]
就是这个东西
所以
f ( n ) = ∑ n ∣ m f ( m ) [ T = = 1 ] f(n) =\sum\limits_{n|m}f(m)[T==1] f(n)=n∣m∑​f(m)[T==1]
          = ∑ n ∣ m f ( m ) [ m / n = = 1 ] \ \ \ \ \ \ \ \ \ =\sum\limits_{n|m}f(m)[m/n==1]          =n∣m∑​f(m)[m/n==1]
          = ∑ n ∣ m f ( m ) [ m = = n ] \ \ \ \ \ \ \ \ \ =\sum\limits_{n|m}f(m)[m==n]          =n∣m∑​f(m)[m==n]
          = f ( n ) \ \ \ \ \ \ \ \ \ =f(n)          =f(n)

证毕

一般用法

设g(n)为gcd(x, y) == n的对数
设f(n)为n | gcd(x,y)的对数 (1 <= x <= N, 1 <= y <= M)

显然满足
f ( n ) = ∑ n ∣ d g ( d ) \large f(n)=\sum\limits_{n|d}g(d) f(n)=n∣d∑​g(d)
一般f(n)很容易算就是
f ( n ) = ⌊ N n ⌋ × ⌊ M n ⌋ \large f(n)= \lfloor\frac{N}{n}\rfloor \times\lfloor\frac{M}{n}\rfloor f(n)=⌊nN​⌋×⌊nM​⌋
那么显然
g ( n ) = ∑ n ∣ d μ ( d / n ) f ( d ) \large g(n)=\sum\limits_{n|d}\mu (d/n)f(d) g(n)=n∣d∑​μ(d/n)f(d)
          = ∑ n ∣ d μ ( d / n ) ⌊ N d ⌋ × ⌊ M d ⌋ \large \ \ \ \ \ \ \ \ \ = \sum\limits_{n|d}\mu (d/n) \lfloor\frac{N}{d}\rfloor \times\lfloor\frac{M}{d}\rfloor          =n∣d∑​μ(d/n)⌊dN​⌋×⌊dM​⌋

做题前还有一个东西必须要掌握 : 整除分块
有些题推出来的式子你会发现有整除,然而对于一个数除以一段连续的数得到的结果是相同的
举个例子

i1234567
⌊ 10 / i ⌋ \lfloor 10/i\rfloor ⌊10/i⌋10532211

那已知左端点,如何求右端点?
右端点 r = n / ( n / l ) r=n/(n/l) r=n/(n/l)

反正也不难记,先记着,后面有时间再证明(flag)

可见连续一段是相等的

    for(int l=1,r;l<=n;l=r+1) {
        r= n / (n / l); 
        计算l ~ r这段的结果
    }

对于两个数 n , m n,m n,m的类比做一下就好了

	for(int l = 1, r = 0; l <= n; l = r + 1) {
		r = min(n / (n / l), m / (m / l));
		计算l ~ r这段的结果	
	}

两年前自己写的关于莫比乌斯反演的垃圾 : 莫比乌斯反演(懵逼钨丝繁衍)
里面有几道题

子集反演

就是裸的容斥
在这里插入图片描述

FWT

之前写过 浅谈FWT

子集卷积

同上,数组多开一维记一下集合大小就好了

posted @ 2020-05-10 18:37  lahlah  阅读(266)  评论(0)    收藏  举报