莫比乌斯函数与反演 学习笔记
莫比乌斯函数与反演
0 前言
建议先看这篇比较简略的文章(有大概了解)
再根据个人情况食用本篇博客
1 莫比乌斯函数
1 1 定义
首先对 \(n\) 唯一分解:
唯一分解:
1 2 性质
1 2 1 性质一
莫比乌斯函数是积性函数
积性函数:
(在这里只需要知道定义基本上就🆗了)
积性函数的性质及证明 + 线性筛_新熊君的博客-CSDN博客
即\(\mu(nm)=\mu(n)\mu(m)\)
这个证明过于显然了点
\(m=1\),所以\(\mu(mn)=\mu(1)\mu(n)=\mu(n)\)
因为\(\mu(m)=\mu(1)=1\),\(\mu(m)\mu(n)=\mu(mn)\)成立
当\(gcd(n,m)=1\)时,显然 \(m,n\) 各自互异质因子的并集= \(mn\) 的互异质因子
并且无交集(因为\(m,n\)互质)
所以 \(m\) 互异质因子个数+ \(n\) 互异质因子个数 = \(mn\) 的互异质因子个数
\(\mu(m)\mu(n)=(-1)^{s_m}(-1)^{s_n}=(-1)^{s_m+s_n}=\mu(mn)\)成立
其中 \(s_n\) 表示 \(n\) 互异质因子的个数
1 2 2 性质二
对于任意正整数 \(n\) ,有:
证明:
\(n=1\) 时,\(\sum_{d|n}\mu(d)=\mu(1)=1\)
\(n\neq1\) 时,\(\sum_{d|n}\mu(d)=\sum_{i=0}^m C_m^i(-1)^i=0\)
为什么呢?
首先对 \(n\)
唯一分解(查看\((0)\))设 \(d=p_1^{q_1}p_2^{q_2}\dots p_m^{q_m}\),其中 \(\forall 1\leq i\leq m, 0\leq q_i\leq k_i\)
当 \(\exist i,q_i \geq 2\) 时,\(\mu(d)=0\)
因此我们只需要考虑只存在 \(q_i=1\space or \space 0\) 的情况
设\(s=\sum_{i=1}^m[q_i\neq0]\)
那么\(\mu(d)=(-1)^s\)
这样的 \(d\) 显然只有 \(C_m^s\) 个
解释:
因为当 \(d\) 有 \(s\) 个互异质因子的时候
这 \(s\) 个质因子显然是 \(n\) 的 \(m\) 个互异质因子之中
因此 \(d\) 就是从 \(m\) 个数中选 \(s\) 个数(有区别)的方案数
即组合数\(C_{m}^s\)
虽然是从0开始,但不至于连组合数是什么都不知道吧因此,现在我们可以得出:
\(\sum_{d|n}\mu(d)=\sum_{s=0}^{m}C_m^s(-1)^s\)
根据
二项式定理,\(\sum_{d|n}\mu(d)=\sum_{s=0}^{m}C_m^s(-1)^s=0\)二项式定理:
【高中数学基础课】二项式定理 - 知乎 (zhihu.com)
emmm还是只看公式就基本上🆗了
反正我们是信息竞赛又不是数学竞赛不过要是有dalao能把证明看懂的话就orz
(但是这好像是高中数学的知识,初三狗表示我不会)
1 3 求解
由于\(\mu(n)\) 是积性函数,所以可以用线性筛法在\(O(n)\)内完成
不知道的看
积性函数
void get_mu(ll n){
mu[1]=1;// 存放 莫比乌斯函数;
//isp[] 存放 是否是质数
//pri[] 存放 质数
for(int i=2;i<=n;i++){
if(!isp[i]) {
pri[++cnt]=i;
mu[i]=-1;
}
for(int j=1;j<=cnt&&i*pri[j]<=n;j++){
isp[i*pri[j]]=1;
if(i%pri[j]==0){
mu[i*pri[j]]=0;
break;
}//也可以直接break 因为里面本来存的就是0
else mu[i*pri[j]]=-mu[i];
}
}
}
1 4 *超级实用的“公式”
证明:
根据性质二\(\sum_{d|n}\mu(d)=[n=1]\)
将\(gcd(i,j)\)带入上式\(n\)
得到\(\sum_{d|gcd(i,j)}\mu(d)=[gcd(i,j)=1]\)
2 莫比乌斯反演
2 1 公式
2 2 证明

2 3 变形
2 3 1 形式一(倍数形式)
证明:
(和一般形式类似)
将 \(g(i)=\sum_{d=1}^{\lfloor \frac{n}{i} \rfloor}f(di)\mu(d)\) 带入前式
\[f(i)=\sum_{d=1}^{\lfloor\frac{n}{i}\rfloor}g(di) \]\[f(i)=\sum_{d=1}^{\lfloor \frac{n}{i} \rfloor}\sum_{d_1=1}^{\lfloor \frac{n}{i} \rfloor}f(dd_1i)\mu(d_1) \]设\(T=dd1\),则:
\[f(i)=\sum_{T=1}^{\lfloor \frac{n}{i} \rfloor}\sum_{d=1}^{\lfloor \frac{n}{i} \rfloor}f(Ti)\mu(\frac{T}{d}) \]\[f(i)=\sum_{T=1}^{\lfloor \frac{n}{i} \rfloor}f(Ti)[\sum_{d=1}^{\lfloor \frac{n}{i} \rfloor}\mu(\frac{T}{d})] \]\[f(i)=\sum_{T=1}^{\lfloor \frac{n}{i} \rfloor}f(Ti)[\sum_{d_1|T}\mu(d_1)] \]根据莫比乌斯函数的性质二
\[\sum_{d|n}\mu(d)= \begin{cases} 1,\quad n=1\\ 0, \quad n\neq1 \end{cases} \]当\(T=1\)时,\(\sum_{d_1|T}\mu(d_1)=1\),\(f(i)[\sum_{d_1|T}\mu(d_1)]=f(i)\mu(1)=f(i)\)
当\(T\neq1\)时,\(\sum_{d_1|T}\mu(d_1)=0\),\(f(Ti)[\sum_{d_1|T}\mu(d_1)]=0\)
综上,
\[f(i)=\sum_{T=1}^{\lfloor \frac{n}{i} \rfloor}f(Ti)[\sum_{d_1|T}\mu(d_1)]=f(i) \]
2 3 2 形式二(整除形式)
就是一般形式
2 4 性质
3 应用
3 1 [HAOI2011]Problem b
3 1 1 题目大意
求当 \(i∈[a,b],j∈[c,d]\),满足\(gcd(i,j)=k\)的数对\((i,j)\)的个数
即
3 1 2 SOLUTION
定义函数\(f\)
\(f(n,m)=\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=k]\)
显然\(ans\)可以由函数 \(f\) 容斥得到
\(ans=f(c,d)−f(a−1,d)−f(b,c−1)+f(a−1,c−1)\)
现在考虑怎么求\(f\)
根据1 1 4*超级实用的公式可得
枚举\(d'=\frac{d}{gcd}\)
浅谈莫比乌斯反演 - B1ueC4t 的博客 - 洛谷博客 (luogu.com.cn)
莫比乌斯反演-让我们从基础开始 - An_Account 的博客 - 洛谷博客 (luogu.com.cn)
莫比乌斯反演 - OI Wiki (oi-wiki.org)
莫比乌斯函数及其应用 - ZAP-Queries + Problem b + GCD_莫比乌斯函数应用_njuptACMcxk的博客-CSDN博客
就可以直接计算了
就是这么简单(才怪)
3 1 3 CODE
#include<bits/stdc++.h>
using namespace std;
const int N=5e4+2;
int T,a,b,c,d,k,mu[N],SumMu[N],pri[N],isp[N],cnt;
int Mobius(int n,int m,int k){//(i[1,n]j[1,m]{[gcd(i,j)=k]})的个数
if(n>m) swap(n,m);
n/=k,m/=k;
int ans=0;
for(int i=1,j;i<=n;i=j+1) {
j=min(n/(n/i),m/(m/i));
ans+=(SumMu[j]-SumMu[i-1])*(n/i)*(m/i);
}
return ans;
}
void Mu(int n);//见模板部分
int main(){
Mu(N-2);
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin>>T;
while(T--){
cin>>a>>b>>c>>d>>k;
cout<<Mobius(b,d,k)-Mobius(b,c-1,k)-Mobius(a-1,d,k)+Mobius(a-1,c-1,k)<<"\n";
}
return 0;
}
3 2 「BZOJ2693」jzptab
【BZOJ2693】jzptab - yoyoball - 博客园 (cnblogs.com)
搞半天发现这个模数搞错了。。。。尬住了,,ԾㅂԾ,,
3 3 [BZOJ4407]于神之怒加强版
[BZOJ4407]于神之怒加强版 - 租酥雨 - 博客园 (cnblogs.com)
枚举倍数真的是一个非常常见并且常用的套路啊!!
3 4 51nod1190 最小公倍数之和 V2
3 4 0 前置知识
斐波那契数列
斐波那契数列的部分性质 - 知乎 (zhihu.com)
斐波那契数列(Fibonacci sequence)及相关结论 - 知乎 (zhihu.com)
【学习笔记】斐波那契数列的简单性质 - changle_cyx - 博客园 (cnblogs.com)
神奇的很
一个小小的性质
这个可以用数学归纳法证明
满足公式o( ̄︶ ̄)o
over!
接下来我们可以愉快地切掉看这道题了
3 4 1 题目大意
给定\(m,n\),求\(\sum_{i=m}^nlcm(i,n)\space mod\space 10^9+7\)
3 4 2 SOLUTION
根据*超级实用的公式
由于我们知道:\(d|gcd(a,b)\Rightarrow d|a\space and\space d|b\)
我们可以发现最后一个sigma显然就是一个等差数列,因此
令\(T=td\)
令\(f(x)=\sum_{d|x}\mu(d)d\)
\(f(x)\)是积性函数
证明:
\[f(a)f(b)=\sum_{x|a}\mu(x)x\sum_{y|b}\mu(y)y \]\[=\sum_{x|a}\sum_{y|b}\mu(x)\mu(y)xy \]因为\(\mu(x)\)是积性函数
\[=\sum_{x|a}\sum_{y|b}\mu(xy)xy \]\[=\sum_{d|ab}\mu(d)d \]\[=f(ab) \]over!
对于一个质数\(p\)
所以若对\(n\)唯一分解
那么
那么我们就可以在枚举质因数 \(d\) 的时候直接计算 \(f(d)\) 了
3 4 3 CODE
好像我当时的代码和上面讲的有点差别
就不放代码了
若想看的话,[BZOJ4407]于神之怒加强版 CODE - _Youngxy - 博客园 (cnblogs.com)
(这是转的zsc985246大佬的code)
4 后话
对于常见配套优化:整除分块 - pengym - 博客园 (cnblogs.com)
最后,我想说莫比乌斯反演-让我们从基础开始 - An_Account 的博客 - 洛谷博客 (luogu.com.cn)这篇博客非常的实用(just tell you the sercet of the common probelms' solution),但是如果想彻底了解的话,我们还是老老实实学吧...( _ _)ノ|
完结撒花❀
★,°:.☆( ̄▽ ̄)/$:.°★ 。

浙公网安备 33010602011771号