浅谈各种反演

前言 (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=0n(1)knk=(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=0n(1)knk=[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=0n[nm==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=0n(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=0nk=0nm(1)k(nmk)(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个的方案数 (nmk)(nm)nmk , 和 先 取 k 个 , 再 从 剩 下 的 当 中 取 m 个 的 方 案 数 相 同 ( n − k m ) ( n k ) ,和先取k个,再从剩下的当中取m个的方案数相同\begin{pmatrix} n-k \\ m \end{pmatrix}\begin{pmatrix} n \\ k \end{pmatrix} km(nkm)(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=0nk=0nm(1)k(nmk)(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=0nk=0nm(1)k(nkm)(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=0n(1)k(nk)m=0nk(nkm)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=0nk(nkm)g(m)=f(nk)
所以
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=0n(1)k(nk)m=0nk(nkm)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=0n(1)k(nk)f(nk)

换一下下标
因为 ( n n − k ) = ( n k ) \begin{pmatrix} n \\ n- k \end{pmatrix} = \begin{pmatrix} n \\ k \end{pmatrix} (nnk)=(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=0n(1)nk(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=0nnkg(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=0n(1)nknkf(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=0nnkg(k)g(n)=k=0n(1)nknkf(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=0n(1)knkg(k)g(n)=k=0n(1)knkf(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=nmkng(k)g(n)=k=nm(1)knknf(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=nm(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=nm(kn)j=km(jk)(1)jkf(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=nmf(j)k=nj(kn)(jk)(1)jk

注 意 到 ( 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)jkkn , 和 先 取 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} njnkn(jn)(jnkn)
因 为 ( 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} (jnkn)=(jnjn(kn))=(jnjk)
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=nmf(j)k=nj(jn)(jnjk)(1)jk
          = ∑ 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=nm(jn)f(j)k=nj(jnjk)(1)jk
设 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=nm(jn)f(j)t=0jn(jnt)(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=0n(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=nm(jn)f(j)[jn==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=nm(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=nmkng(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=nm(1)knknf(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)=dng(d)g(n)=dnμ(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=p1p2p3....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] dnμ(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=0m(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=0n(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=0m(1)k(mk)=[m==0]

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

证明

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

类似的我们可以搞一搞

∑ d ∣ n μ ( d ) = [ n = = 1 ] \large \sum\limits_{d|n}\mu(d) =[n==1] dnμ(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)=mn[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)=mndmnμ(d)g(m)

注意到 d ∣ n m 就 是 m d ∣ n 和 m ∣ n d d|\frac{n}{m}就是md|n和m|\frac{n}{d} dmnmdnmdn是等价的
所以
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)=mnmdnμ(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)=dnμ(d)mdng(m)
右边那个东西是不是有点熟悉
就是 f ( n ) = ∑ d ∣ n g ( d ) f(n)=\sum\limits_{d|n}g(d) f(n)=dng(d)
所以
g ( n ) = ∑ d ∣ n μ ( d ) f ( n / d ) g(n) =\sum\limits_{d|n}\mu(d)f(n/d) g(n)=dnμ(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)=ndg(d)g(n)=ndμ(d/n)f(d)
类比二项式反演的证明
把右边的代入左边
f ( n ) = ∑ n ∣ d g ( d ) f(n)=\sum\limits_{n|d}g(d) f(n)=ndg(d)

          = ∑ n ∣ d ∑ d ∣ m μ ( m / d ) f ( m ) \ \ \ \ \ \ \ \ \ =\sum\limits_{n|d}\sum\limits_{d|m}\mu (m/d)f(m)          =nddmμ(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)          =nmtnmm/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)=nmtnmTμ(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)          =nmf(m)tTTμ(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) tTTμ(T/t)=tTTμ(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)=nmf(m)tTTμ(t)
右边那个东西是不是又很熟悉
∑ d ∣ n μ ( d ) = [ n = = 1 ] \large \sum\limits_{d|n}\mu(d) =[n==1] dnμ(d)=[n==1]
就是这个东西
所以
f ( n ) = ∑ n ∣ m f ( m ) [ T = = 1 ] f(n) =\sum\limits_{n|m}f(m)[T==1] f(n)=nmf(m)[T==1]
          = ∑ n ∣ m f ( m ) [ m / n = = 1 ] \ \ \ \ \ \ \ \ \ =\sum\limits_{n|m}f(m)[m/n==1]          =nmf(m)[m/n==1]
          = ∑ n ∣ m f ( m ) [ m = = n ] \ \ \ \ \ \ \ \ \ =\sum\limits_{n|m}f(m)[m==n]          =nmf(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)=ndg(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)=ndμ(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          =ndμ(d/n)dN×dM

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

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

那已知左端点,如何求右端点?
右端点 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  阅读(210)  评论(0编辑  收藏  举报