初探莫比乌斯反演

我们首先从这个函数出发:\(\mu(n)\),它被称作莫比乌斯函数

它的定义式是这样的

\[
\mu(n)=
\begin{cases}
1& n=1\(-1)^r& n=p_1p_2\ldots p_r,p_1,p_2,\ldots p_r\in prime\0& p^k|n,p\in prime,k>1
\end{cases}
\]

即:在对\(n\)进行质因子分解之后,所有质因子的幂次都不大于1的话,\(\mu(n)=(-1)^r\),r为n互不相同的质因子的个数。若n有某一个质因子的幂次大于1的话,\(\mu(n)=0\)

关于\(\mu(n)\)函数有许多有趣的性质

1、\(\sum_{d|n}\mu(d)=0(d>1)\)

证明:令\(n=p_1^{a_1}p_2^{a_2}\ldots p_r^{a_r},p_1,p_2,\ldots p_r\in prime\),考虑数\(m=p_1p_2\ldots p_r,p_1,p_2,\ldots p_r\in prime\)

则\(\sum_{d|n}\mu(d)=\sum_{d|m}\mu(d)=\sum_{i=0}^{r}C_r^i(-1)^r1^{i-r}=(1-1)^r=0\)

命题得证

2、\(\frac{\varphi(n)}{n}=\sum_{d|n}\frac{\mu(d)}{d}\)

为了证明这个和下面的反演,我们引入一个新概念——狄利克雷卷积

我们说:数论函数指定义域为正整数、值域为复数的函数,比如上文中我们提到的\(\mu(n),\varphi(n)\)

同时我们再定义几个比较常见的数论函数

\(e(n)\),元函数,\(e(n)=[n=1]\)([]中带的是一个逻辑判别式,如果满足的话值为1,否则值为0)

\(I(n)\),恒等函数,\(I(n)=1\)

\(id(n)\),单位函数,\(id(n)=n\)

然后就是狄利克雷卷积的定义了

对于两个数论函数\(f(n)\)和\(g(n)\),定义它们的卷积\((f*g)(n)=\sum_{d|n}f(n)g(\frac{n}{d})\),一般等式左边的\((n)\)可以不写

容易证明,卷积运算满足交换律,结合律和分配律

我们从卷积的角度,再回过头去看这两条性质

第一条性质可以被表述成\(\mu*I=e\),这是下面证明的关键

第二条性质:

我们在两边同时乘上n,得到\(\varphi(n)=\sum_{d|n}\mu(d)\frac{n}{d}\)

我们知道\(\varphi(n)\)满足\(\sum_{d|n}\varphi(d)=n\)

我们把它写成卷积的形式:\(\varphi *I=id\)

在两边同时乘上\(\mu\),得到\(\varphi *I *\mu=id *\mu\)

把\(I*\mu\)约去,得到\(\varphi=id*\mu\),就是我们一开始写出来的式子

因此命题得证

我们再看到莫比乌斯反演,它一般有两种写法

1、如果两个数论函数\(f(n),F(n)\)满足

\[
F(n)=\sum_{d|n}f(d)
\]

那么

\[
f(n)=\sum_{d|n}\mu(d)F(\frac{n}{d})
\]

2、如果两个数论函数\(f(n),F(n)\)满足

\[
F(n)=\sum_{n|d}f(d)
\]

那么

\[
f(n)=\sum_{n|d}\mu(\frac{d}{n})F(d)
\]

我们从纯数学的角度来证明一下这两个式子

1、

\[
\sum_{d|n}\mu(d)F(\frac{n}{d})=\sum_{d|n}\mu(d)\sum_{i|\frac{n}{d}}f(i)=\sum_{i|n}f(i)\sum_{d|\frac{n}{i}}\mu(d)
\]

由\(\mu(d)\)的第一个性质我们知道,当\(\frac{n}{i}=1\)即\(n=i\)时,\(\sum_{d|\frac{n}{i}}\mu(d)\)的值为1,其他时候这个式子的值均为0

因此

\[
\sum_{i|n}f(i)\sum_{d|\frac{n}{i}}\mu(d)=f(n)(满足i=n时)
\]

2、

\[
\sum_{n|d}\mu(\frac{d}{n})F(d)=\sum_{k=1}\mu(k)F(nk)=\sum_{k=1}\mu(k)\sum_{nk|t}f(t)=\sum_{n|t}f(t)\sum_{k|\frac{t}{n}}\mu(k)
\]

剩下的就和1的证明大体类似了

在这里再提供一种更为简洁的证明思路——利用卷积

在这里以1的证明为一个例子

对于\(F(n)=\sum_{d|n}f(d)\),我们可以把它写成卷积的形式:\(F=f*I\)

在两边同时乘上\(\mu\),得到\(F*\mu=f*I*\mu\)

约去\(I*\mu\),即\(f=F*\mu\)

证完了QAQ

看了这么多,你肯定会问了:这玩意有什么用?

实际上,在一些题目中,出题人会让你求某一个函数的值,我们会发现直接求它的值不好求,而求它的因数函数值之和或倍数函数值之和会更加方便,于是我们就要用到反演了

然而更多的时候我们要求的函数值与反演看起来八竿子打不着,这就需要我们通过构造函数来达到简化计算了

由于涉及到莫比乌斯反演的题目对时间复杂度的要求较高,一般不会要你在\(O(n)\)的时间内求解,所以为了加速,我们还需要掌握一个知识——整除分块,可以直接看我写的某一道题目的题解

例题由于zzr太懒所以并没有,留着以后填坑

原文地址:https://www.cnblogs.com/zhou2003/p/10046869.html

时间: 2024-10-16 06:38:07

初探莫比乌斯反演的相关文章

Visible Lattice Points(spoj7001+初探莫比乌斯)gcd(a,b,c)=1 经典

VLATTICE - Visible Lattice Points no tags Consider a N*N*N lattice. One corner is at (0,0,0) and the opposite one is at (N,N,N). How many lattice points are visible from corner at (0,0,0) ? A point X is visible from point Y iff no other lattice point

CO-PRIME(初探 莫比乌斯)NYOJ1066(经典)gcd(a,b)=1

CO-PRIME 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描写叙述 This problem is so easy! Can you solve it? You are given a sequence which contains n integers a1,a2--an, your task is to find how many pair(ai, aj)(i < j) that ai and aj is co-prime. 输入 There are mult

CO-PRIME(初探 莫比乌斯)NYOJ1066(经典)

CO-PRIME 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 This problem is so easy! Can you solve it? You are given a sequence which contains n integers a1,a2--an, your task is to find how many pair(ai, aj)(i < j) that ai and aj is co-prime. 输入 There are multip

bzoj 2820 / SPOJ PGCD 莫比乌斯反演

那啥bzoj2818也是一样的,突然想起来好像拿来当周赛的练习题过,用欧拉函数写掉的. 求$(i,j)=prime$对数 \begin{eqnarray*}\sum_{i=1}^{n}\sum_{j=1}^{m}[(i,j)=p]&=&\sum_{p=2}^{min(n,m)}\sum_{i=1}^{\lfloor\frac{n}{p}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{p}\rfloor}[i⊥j]\newline&=&\sum_{p=

hdu1695(莫比乌斯反演)

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意: 对于 a, b, c, d, k . 有 x 属于 [a, b],  y 属于 [c, d], 求 gcd(x, y) = k 的 x, y 的对数 . 其中 a = b = 1 . 注意: (x, y), (y, x) 算一种情况 . 思路: 莫比乌斯反演 可以参考一下: http://blog.csdn.net/lixuepeng_001/article/details/5057

算法学习——莫比乌斯反演(1)

.. 省选GG了,我果然还是太菜了.. 突然想讲莫比乌斯反演了 那就讲吧! 首先我们看一个等式-- (d|n表示d是n的约束) 然后呢,转换一下 于是,我们就发现! 没错!F的系数是有规律的! 规律is here! 公式: 这个有什么卵用呢? 假如说有一道题 F(n)可以很simple的求出来而求f(n)就比较difficult了,该怎么办呢? 然后就可以用上面的式子了 是莫比乌斯函数,十分有趣 定义如下: 若d=1,则=1 若d=p1*p2*p3...*pk,且pi为互异素数,则=(-1)^k

bzoj2301 [HAOI2011]Problem b【莫比乌斯反演 分块】

传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2301 很好的一道题.首先把每个询问转化为4个子询问,最后的结果就是这四个子询问的记过加加减减,类似二维前缀和.那么问题转化为在1 <= x <= lmtx, 1 <= y <= lmty时gcd(x, y) == k的对数,这个问题在转化一下,转化成1 <= x <= lmtx / k,1 <= y <= lmty / k时x与y互质的对数.莫比乌斯反

BZOJ2301: [HAOI2011]Problem b 莫比乌斯反演

分析:对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. 然后对于求这样单个的gcd(x,y)=k的,我们通常采用莫比乌斯反演 但是,时间复杂度是O(n*(n/k))的,当复杂度很坏的时候,当k=1时,退化到O(n^2),超时 然后进行分块优化,时间复杂度是O(n*sqrt(n)) #include<cstdio> #include<cstring> #include<queue

BZOJ2005: [Noi2010]能量采集 莫比乌斯反演的另一种方法——nlogn筛

分析:http://www.cnblogs.com/huhuuu/archive/2011/11/25/2263803.html 注:从这个题收获了两点 1,第一象限(x,y)到(0,0)的线段上整点的个数是gcd(x,y) 2,新学了一发求gcd(x,y)=k有多少对的姿势,已知0<x<=n,0<y<=m 令x=min(n,m),令f[i]代表gcd(x,y)=i的对数, 那么通过O(xlogx)的复杂度就可以得到f[1]到f[n](反着循环) 普通的容斥(即莫比乌斯反演)其实也