莫比乌斯反演
前言
本文章中所有出现的 ([n=1]) 表示只有 (n=1)时, ([n=1]) 为 (1) ,否则为 (0)。
(n perp m) 表示 (n) 与 (m) 互质。
狄利克雷卷积
引出:
我们都知道卷积的算式:
(C(n)= sumlimits_{i oplus j = n} A(i) imes B(j))
如果 “ $ oplus $ ”为加号,就是加法卷积,我们可以用 $ FFT$, (NTT) 等算法来快速实现加法卷积。
那么现在我们令“ $ oplus $ ”为乘号,它就成了乘法卷积。
(C(n)= sumlimits_{i imes j = n} A(i) imes B(j))
(Leftrightarrow C(n)= sumlimits_{imid n} A(i) imes B( frac{n}{i}))
上面这个就是狄利克雷卷积。
我们一般简写成: (C= A * B),“(*)”代表以上的运算。
它满足交换律:(A * B = B * A)
结合律:((A * B) * C = A * (B * C))
分配律:((A + B) * C = A * C + B * C)
单位元:
我们有一个叫单位元的东西,单位元叫 (epsilon) 。
对于任意一个数论函数 (f) , 都有 (epsilon * f = f)。
而单位元的求法为 (epsilon(n)=[n=1]= egin{cases}1quad n=1\0quad n>1end{cases});
逆元:
每一个数论函数都存在它的逆元。
现在有两个数论函数 (f), (g),(g) 为 (f) 的逆元,则有:(f*g=epsilon) 。
求一个函数的逆:(g(n)= frac{1}{f(1)}left([n=1]-sumlimits_{imid n,i e1}f(i)g( frac{n}{i}) ight))
积性函数:
积性函数:当(n perp m)时:
(f(n imes m)=f(n) imes f(m))
常见积性函数:(id) ,(mu) ,(phi) ,(sigma)。
$ id(n)$ 函数就是返回自己,比如 (id(3)=3) 。
(sigma_0(n)) 函数就是求 (n) 的因数个数。
(phi(n)) 函数就是求与 (n) 互质的个数。
为什么要这么强调积性函数呢?因为这种函数可以通过线性筛来快速求解得到。
莫比乌斯反演:
我们定义 (1) 的逆为 (mu) 。
定义:(1 * mu = epsilon)。
(1) 的逆元为 (mu) 。
设一个函数 (f) , (f(n)=1) 。
(epsilon(n)=[n=1]=sumlimits_{dmid n}mu(d) imes f( frac{n}{d})=sumlimits_{dmid n}mu(d) imes 1=sumlimits_{dmid n}mu(d))
现在有两个数论函数 (f) 和 (g) ,满足 (f * 1 = g) ,那么有 (g * mu = f)。
则有: (f(n) = sumlimits_{i mid n} g(i) imes mu( frac{n}{i})) 。(莫比乌斯反演结论)
(mu) 的值:
(mu(n) = egin{cases} (-1)^{t}quad n = p_1p_2p_3...p_t且p_i互不相同。\ 0quad n不符合上述条件。end{cases})
例题
例一
求:(sumlimits_{i=1}^nsumlimits_{j=1}^m[gcd(i,j)=1]quad(n<m))
(Leftrightarrowsumlimits_{i=1}^nsumlimits_{j=1}^msumlimits_{dmid gcd(i,j)}mu(d))
因为 (d mid gcd(i,j)) 所以 (dmid i) 且 (dmid j) ,因此 (i) , (j) 必须得是 (d) 的倍数,然后把 (d) 提前。
得:
(Leftrightarrow sumlimits_{d=1}^nmu(d) imes leftlfloor frac{n}{d} ight floor imes leftlfloor frac{m}{d} ight floor)
首先 (mu) 可以用线性筛求出,然后式子前面一部分可以用前缀和实现,可以用后面一部分可以通过分块思想实现。
时间复杂度:(O(n)) 。
例二
求:(sumlimits_{i=1}^n sumlimits_{j=1}^m [gcd(i,j)=k])
我们发现与例一相比,例二的 (gcd(i,j)) 的数不再是 (1) ,但是如果满足 (gcd(i,j)=k) 的话,必有 (k mid i) 且 $ k mid j$ ,那么我们可以让他们同除 (k) ,得到例一的式子。
(sumlimits_{i=1}^{leftlfloor frac{n}{k} ight floor} sumlimits_{j=1}^{leftlfloor frac{m}{k} ight floor} [gcd(i,j)=1])
(sumlimits_{i=1}^{leftlfloor frac{n}{k} ight floor} sumlimits_{j=1}^{leftlfloor frac{m}{k} ight floor} sumlimits_{d mid gcd(i,j)}mu(d))
(sumlimits_{d=1}^{leftlfloor frac{n}{k} ight floor}mu(d) imes {leftlfloor frac{n}{kd} ight floor} imes {leftlfloor frac{m}{kd} ight floor})
例三
求:(sumlimits_{i=1}^nsumlimits_{j=1}^m[gcd(i,j)为素数])
例三我们现在的 $ gcd(i,j)$ 要求是为素数,我们可以枚举 (k) ,这样问题就转化成了例二。
(Leftrightarrow sumlimits_{k=1}^nsumlimits_{i=1}^nsumlimits_{j=1}^m[gcd(i,j)=k]quad k为素数)
(Leftrightarrow sumlimits_{k=1}^nsumlimits_{i=1}^{leftlfloor frac{n}{k} ight floor}sumlimits_{j=1}^{leftlfloor frac{m}{k} ight floor}[gcd(i,j)=1]quad k为素数)
(Leftrightarrow sumlimits_{k=1}^nsumlimits_{i=1}^{leftlfloor frac{n}{k} ight floor}sumlimits_{j=1}^{leftlfloor frac{m}{k} ight floor}sumlimits_{dmid gcd(i,j)}mu(d)quad k为素数)
(Leftrightarrowsumlimits_{k=1}^nsumlimits_{d=1}^leftlfloor frac{n}{k} ight floormu(d) imes sumlimits_{i=1}^leftlfloor frac{n}{k} ight floorsumlimits_{j=1}^leftlfloor frac{m}{k} ight floor[dmid i][dmid j]quad k为素数)
(Leftrightarrow sumlimits_{k=1}^nsumlimits_{d=1}^leftlfloor frac{n}{k} ight floormu(d) imes leftlfloor frac{n}{kd} ight floor imes leftlfloor frac{m}{kd} ight floorquad k为素数)
如果你觉得这样子就是最简了,直接就枚举(k),感觉可以,但是会超时。所以我们要继续对这个式子进行优化。我们设 (T=kd) ,得:
(Leftrightarrow sumlimits_{k=1}^n sumlimits_{dk=1}^n mu(d) imes leftlfloor frac{n}{kd} ight floor imes leftlfloor frac{m}{kd} ight floorquad k为素数)
(Leftrightarrow sumlimits_{T=1}^n sumlimits_{dmid T}mu( frac{T}{d}) imes leftlfloor frac{n}{T} ight floor imes leftlfloor frac{m}{T} ight floor quad d为素数)
然后 (sumlimits_{d mid T} mu( frac{T}{d})) 也可以在线性筛中求解,只要枚举每一个素数,然后把所有可以整除它的都加上就行了。
例四
(sumlimits_{i=1}^n sumlimits_{j=1}^n i imes j imes gcd(i,j))
老套路,我们枚举 (k)。
(sumlimits_{k=1}^nsumlimits_{i=1}^n sumlimits_{j=1}^n i imes j imes k imes [gcd(i,j)=k])
这次同除 (k) 就要注意了,由于我们除 (k) 之后, (i) 和 (j) 都变小了,所以我们必须再乘回来。
(sumlimits_{k=1}^nsumlimits_{i=1}^{leftlfloor frac{n}{k} ight floor} sumlimits_{j=1}^{leftlfloor frac{n}{k} ight floor} i imes j imes k^3 imes [gcd(i,j)=1])
(sumlimits_{k=1}^nsumlimits_{i=1}^{leftlfloor frac{n}{k} ight floor} sumlimits_{j=1}^{leftlfloor frac{n}{k} ight floor} i imes j imes k^3 imes sumlimits_{dmid gcd(i,j)}mu(d))
(sumlimits_{k=1}^n sumlimits_{d=1}^{leftlfloor frac{n}{k} ight floor}mu(d) imes sumlimits_{i=1}^{leftlfloor frac{n}{kd} ight floor} sumlimits_{j=1}^{leftlfloor frac{n}{kd} ight floor} i imes j imes k^3 imes d^2)
(sumlimits_{k=1}^n k^3 imes sumlimits_{d=1}^{leftlfloor frac{n}{k} ight floor}mu(d) imes d^2 imes sumlimits_{i=1}^{leftlfloor frac{n}{kd} ight floor} sumlimits_{j=1}^{leftlfloor frac{n}{kd} ight floor} i imes j)
设 (T = kd) :
(sumlimits_{T=1}^n sumlimits_{dmid T}mu( frac{T}{d}) imes d imes T^2 imes sumlimits_{i=1}^{leftlfloor frac{n}{T} ight floor}i sumlimits_{j=1}^{leftlfloor frac{n}{T} ight floor}j)
(sumlimits_{T=1}^n T^2 imes sumlimits_{dmid T}mu( frac{T}{d}) imes d imes left( sumlimits_{i=1}^{leftlfloor frac{n}{T} ight floor}i ight)^2)
因为我们有 (id * mu = phi) ,所以 $phi(n) = sumlimits_{imid n}mu( frac{n}{i}) imes i $ 。
(sumlimits_{T=1}^n T^2 imes sumlimits_{dmid T}phi(d) imes left( sumlimits_{i=1}^{leftlfloor frac{n}{T} ight floor}i ight)^2)
(phi) 函数可以用线性筛求解,后面的可以用求和公式算出。
例五
求:(sumlimits_{i1=L}^Rsumlimits_{i2=L}^R...sumlimits_{in=L}^R[gcd(i1,i2...in)=K])
按照之前的套路。
(sumlimits_{i1=leftlfloor frac{L-1}{K} ight floor+1}^{leftlfloor frac{R}{K} ight floor}sumlimits_{i2=leftlfloor frac{L-1}{K} ight floor+1}^{leftlfloor frac{R}{K} ight floor}...sumlimits_{in=leftlfloor frac{L-1}{K} ight floor+1}^{leftlfloor frac{R}{K} ight floor}[gcd(i1,i2...in)=1])
(sumlimits_{i1=leftlfloor frac{L-1}{K} ight floor+1}^{leftlfloor frac{R}{K} ight floor}sumlimits_{i2=leftlfloor frac{L-1}{K} ight floor+1}^{leftlfloor frac{R}{K} ight floor}...sumlimits_{in=leftlfloor frac{L-1}{K} ight floor+1}^{leftlfloor frac{R}{K} ight floor}sumlimits_{dmid gcd(i1,i2...in)}mu(d))
(sumlimits_{d=1}^{leftlfloor frac{R}{K} ight floor}mu(d) imes leftlfloor frac{leftlfloor frac{R}{K} ight floor-leftlfloor frac{L-1}{K} ight floor-1}{d} ight floor^n)
设 (Y=leftlfloor frac{R}{K} ight floor) , (X = leftlfloor frac{L-1}{K} ight floor + 1) 。
(sumlimits_{d=1}^{leftlfloor frac{R}{K} ight floor}mu(d) imes leftlfloor frac{Y - X}{d} ight floor^n)
例六
(sumlimits_{i=1}^n sumlimits_{j=1}^m sigma_1(gcd(i,j)))
我们可以通过枚举 (k) 把 (gcd(i,j)) 转到外面。
(sumlimits_{k=1}^n sumlimits_{i=1}^n sumlimits_{j=1}^m sigma_1(k) imes [gcd(i,j)=k])
(sumlimits_{k=1}^n sumlimits_{i=1}^{leftlfloor frac{n}{k} ight floor} sumlimits_{j=1}^{leftlfloor frac{m}{k} ight floor} sigma_1(k) imes [gcd(i,j)=1])
(sumlimits_{k=1}^n sumlimits_{i=1}^{leftlfloor frac{n}{k} ight floor} sumlimits_{j=1}^{leftlfloor frac{m}{k} ight floor} sigma_1(k) imes sumlimits_{dmid gcd(i,j)}mu(d))
(sumlimits_{k=1}^n sigma_1(k) imes sumlimits_{d=1}^{leftlfloor frac{n}{k} ight floor}mu(d) imes leftlfloor frac{n}{kd} ight floor imes leftlfloor frac{m}{kd} ight floor)
设 (T=kd)
(sumlimits_{T=1}^{n} leftlfloor frac{n}{T} ight floor imes leftlfloor frac{m}{T} ight floor imes sumlimits_{dmid T}sigma_1(d) imes mu(leftlfloor frac{T}{d} ight floor))
(sigma_1(n)) 表示 (n) 所有的因数之和,是积性函数。
例七
(sumlimits_{i=1}^n sumlimits_{j=1}^n gcd(A_i,A_j))
乍一看,我们发现我们对 (Ai) , (Aj) 无从下手,我们希望把 (gcd) 里面的东西变成我们可以控制的。我们可以用 (B) 来统计 (A) 出现的次数, (MAXA) 表示 (A) 中最大的数的值,这样一来, (gcd) 里面的东西就是我们可以控制的 (i) 和 (j) 了。
(sumlimits_{i=1}^{MAXA} sumlimits_{j=1}^{MAXA} gcd(i,j) imes B_i imes B_j)
(sumlimits_{k=1}^{MAXA} sumlimits_{i=1}^{MAXA} sumlimits_{j=1}^{MAXA} [gcd(i,j)=k] imes B_i imes B_j)
(sumlimits_{k=1}^{MAXA} sumlimits_{i=1}^{leftlfloor frac{MAXA}{k} ight floor} sumlimits_{j=1}^{leftlfloor frac{MAXA}{k} ight floor} [gcd(i,j)=1] imes B_{ik} imes B_{jk})
(sumlimits_{k=1}^{MAXA} sumlimits_{i=1}^{leftlfloor frac{MAXA}{k} ight floor} sumlimits_{j=1}^{leftlfloor frac{MAXA}{k} ight floor} sumlimits_{dmid gcd(i,j)}mu(d) imes B_{ik} imes B_{jk})
(sumlimits_{k=1}^{MAXA} sumlimits_{d=1}^{leftlfloor frac{MAXA}{k} ight floor} mu(d) imes sumlimits_{i=1}^{leftlfloor frac{MAXA}{kd} ight floor} sumlimits_{j=1}^{leftlfloor frac{MAXA}{kd} ight floor} B_{ikd} imes B_{jkd})
设 (T=kd)
(sumlimits_{k=1}^{MAXA} sumlimits_{dk=1}^{MAXA} mu(d) imes sumlimits_{i=1}^{leftlfloor frac{MAXA}{kd} ight floor} sumlimits_{j=1}^{leftlfloor frac{MAXA}{kd} ight floor} B_{ikd} imes B_{jkd})
(sumlimits_{T = 1}^{MAXA} sumlimits_{d mid T} mu(d) imes sumlimits_{i=1}^{leftlfloor frac{MAXA}{T} ight floor} sumlimits_{j=1}^{leftlfloor frac{MAXA}{T} ight floor} B_{iT} imes B_{jT})
(sumlimits_{T = 1}^{MAXA} sumlimits_{d mid T} mu(d) imes left( sumlimits_{i=1}^{leftlfloor frac{MAXA}{T} ight floor} B_{iT} ight)^2)