莫比乌斯
0 前言
建议先看这篇比较简略的文章(有大概了解)
莫比乌斯函数_为最后的荣光的博客-CSDN博客
再根据个人情况食用本篇博客
1 莫比乌斯函数
1 1 定义
首先对
n
n
n 唯一分解
:
唯一分解:
唯一分解定理一篇就够了_求唯一分解式程序_JdiLfc的博客-CSDN博客
唯一分解定理及其证明 - 夶 - 博客园 (cnblogs.com)
n = p 1 k 1 p 2 k 2 … p m k m , 其中 p i 为 n 的互异质因子 , ∀ i , k i 为正整数 (0) n=p_1^{k_1}p_2^{k_2}\dots p_m^{k_m},其中p_i为n的互异质因子,\forall i,k_i为正整数 \tag{0} n=p1k1p2k2…pmkm,其中pi为n的互异质因子,∀i,ki为正整数(0)
μ ( n ) = { 1 , n = 1 0 , ∃ i , k i ≠ 1 ( − 1 ) m , ∀ i , k i = 1 (1) \mu(n)= \begin{cases} 1,\quad n=1\\ 0, \quad \exist i,k_i\neq1\\ (-1)^m,\quad \forall i, k_i=1 \end{cases} \tag{1} μ(n)=⎩ ⎨ ⎧1,n=10,∃i,ki=1(−1)m,∀i,ki=1(1)
1 2 性质
1 2 1 性质一
莫比乌斯函数是积性函数
积性函数:
(在这里只需要知道定义基本上就🆗了)
[积性函数的性质及证明 + 线性筛_新熊君的博客-CSDN博客](https://blog.csdn.net/wubaizhe/article/details/76711158#:~:text=定义: 对于一个定义域为 N %2B 的函数 f ,对于任意两个互质的正整数 a%2Cb,(ab) %3D f (a)f (b) ,则函数 f 被称为完全积性函数。)
积性函数 - Wuweizheng - 博客园 (cnblogs.com)
积性函数与线性筛 - 租酥雨 - 博客园 (cnblogs.com)
即 μ ( n m ) = μ ( n ) μ ( m ) \mu(nm)=\mu(n)\mu(m) μ(nm)=μ(n)μ(m)
这个证明过于显然了点
m = 1 m=1 m=1,所以 μ ( m n ) = μ ( 1 ) μ ( n ) = μ ( n ) \mu(mn)=\mu(1)\mu(n)=\mu(n) μ(mn)=μ(1)μ(n)=μ(n)
因为 μ ( m ) = μ ( 1 ) = 1 \mu(m)=\mu(1)=1 μ(m)=μ(1)=1, μ ( m ) μ ( n ) = μ ( m n ) \mu(m)\mu(n)=\mu(mn) μ(m)μ(n)=μ(mn)成立
当 g c d ( n , m ) = 1 gcd(n,m)=1 gcd(n,m)=1时,显然 m , n m,n m,n 各自互异质因子的并集= m n mn mn 的互异质因子
并且无交集(因为 m , n m,n m,n互质)
所以 m m m 互异质因子个数+ n n n 互异质因子个数 = m n mn mn 的互异质因子个数
μ ( m ) μ ( n ) = ( − 1 ) s m ( − 1 ) s n = ( − 1 ) s m + s n = μ ( m n ) \mu(m)\mu(n)=(-1)^{s_m}(-1)^{s_n}=(-1)^{s_m+s_n}=\mu(mn) μ(m)μ(n)=(−1)sm(−1)sn=(−1)sm+sn=μ(mn)成立
其中 s n s_n sn 表示 n n n 互异质因子的个数
1 2 2 性质二
对于任意正整数
n
n
n ,有:
∑
d
∣
n
μ
(
d
)
=
{
1
,
n
=
1
0
,
n
≠
1
(2)
\sum_{d|n}\mu(d)= \begin{cases} 1,\quad n=1\\ 0, \quad n\neq1 \end{cases} \tag{2}
d∣n∑μ(d)={1,n=10,n=1(2)
证明:
n = 1 n=1 n=1 时, ∑ d ∣ n μ ( d ) = μ ( 1 ) = 1 \sum_{d|n}\mu(d)=\mu(1)=1 ∑d∣nμ(d)=μ(1)=1
n ≠ 1 n\neq1 n=1 时, ∑ d ∣ n μ ( d ) = ∑ i = 0 m C m i ( − 1 ) i = 0 \sum_{d|n}\mu(d)=\sum_{i=0}^m C_m^i(-1)^i=0 ∑d∣nμ(d)=∑i=0mCmi(−1)i=0
为什么呢?
首先对 n n n
唯一分解
(查看 ( 0 ) (0) (0))设 d = p 1 q 1 p 2 q 2 … p m q m d=p_1^{q_1}p_2^{q_2}\dots p_m^{q_m} d=p1q1p2q2…pmqm,其中 ∀ 1 ≤ i ≤ m , 0 ≤ q i ≤ k i \forall 1\leq i\leq m, 0\leq q_i\leq k_i ∀1≤i≤m,0≤qi≤ki
当 ∃ i , q i ≥ 2 \exist i,q_i \geq 2 ∃i,qi≥2 时, μ ( d ) = 0 \mu(d)=0 μ(d)=0
因此我们只需要考虑只存在 q i = 1 o r 0 q_i=1\space or \space 0 qi=1 or 0 的情况
设 s = ∑ i = 1 m [ q i ≠ 0 ] s=\sum_{i=1}^m[q_i\neq0] s=∑i=1m[qi=0]
那么 μ ( d ) = ( − 1 ) s \mu(d)=(-1)^s μ(d)=(−1)s
这样的 d d d 显然只有 C m s C_m^s Cms 个
解释:
因为当 d d d 有 s s s 个互异质因子的时候
这 s s s 个质因子显然是 n n n 的 m m m 个互异质因子之中
因此 d d d 就是从 m m m 个数中选 s s s 个数(有区别)的方案数
即组合数 C m s C_{m}^s Cms
虽然是从0开始,但不至于连组合数是什么都不知道吧因此,现在我们可以得出:
∑ d ∣ n μ ( d ) = ∑ s = 0 m C m s ( − 1 ) s \sum_{d|n}\mu(d)=\sum_{s=0}^{m}C_m^s(-1)^s ∑d∣nμ(d)=∑s=0mCms(−1)s
根据
二项式定理
, ∑ d ∣ n μ ( d ) = ∑ s = 0 m C m s ( − 1 ) s = 0 \sum_{d|n}\mu(d)=\sum_{s=0}^{m}C_m^s(-1)^s=0 ∑d∣nμ(d)=∑s=0mCms(−1)s=0二项式定理:
【高中数学基础课】二项式定理 - 知乎 (zhihu.com)
emmm还是只看公式就基本上🆗了
反正我们是信息竞赛又不是数学竞赛不过要是有dalao能把证明看懂的话就orz
(但是这好像是高中数学的知识,初三狗表示我不会)
1 3 求解
由于 μ ( n ) \mu(n) μ(n) 是积性函数,所以可以用线性筛法在 O ( n ) O(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 *超级实用的“公式”
[ g c d ( i , j ) = 1 ] = ∑ d ∣ g c d ( i , j ) μ ( d ) [gcd(i,j)=1]=\sum_{d|gcd(i,j)}\mu(d) [gcd(i,j)=1]=d∣gcd(i,j)∑μ(d)
证明:
根据性质二 ∑ d ∣ n μ ( d ) = [ n = 1 ] \sum_{d|n}\mu(d)=[n=1] ∑d∣nμ(d)=[n=1]
将 g c d ( i , j ) gcd(i,j) gcd(i,j)带入上式 n n n
得到 ∑ d ∣ g c d ( i , j ) μ ( d ) = [ g c d ( i , j ) = 1 ] \sum_{d|gcd(i,j)}\mu(d)=[gcd(i,j)=1] ∑d∣gcd(i,j)μ(d)=[gcd(i,j)=1]
2 莫比乌斯反演
2 1 公式
f ( n ) = ∑ d ∣ n g ( d ) ⇒ g ( n ) = ∑ d ∣ n f ( n d ) μ ( d ) f(n)=\sum_{d|n}g(d)\Rightarrow g(n)=\sum_{d|n}f(\frac{n}{d})\mu(d) f(n)=d∣n∑g(d)⇒g(n)=d∣n∑f(dn)μ(d)
2 2 证明
2 3 变形
2 3 1 形式一(倍数形式)
f ( i ) = ∑ d = 1 ⌊ n i ⌋ g ( d i ) ⇒ g ( i ) = ∑ d = 1 ⌊ n i ⌋ f ( d i ) μ ( d ) f(i)=\sum_{d=1}^{\lfloor \frac{n}{i} \rfloor}g(di)\Rightarrow g(i)=\sum_{d=1}^{\lfloor \frac{n}{i} \rfloor}f(di)\mu(d) f(i)=d=1∑⌊in⌋g(di)⇒g(i)=d=1∑⌊in⌋f(di)μ(d)
证明:
(和一般形式类似)
将 g ( i ) = ∑ d = 1 ⌊ n i ⌋ f ( d i ) μ ( d ) g(i)=\sum_{d=1}^{\lfloor \frac{n}{i} \rfloor}f(di)\mu(d) g(i)=∑d=1⌊in⌋f(di)μ(d) 带入前式
f ( i ) = ∑ d = 1 ⌊ n i ⌋ g ( d i ) f(i)=\sum_{d=1}^{\lfloor\frac{n}{i}\rfloor}g(di) f(i)=d=1∑⌊in⌋g(di)f ( i ) = ∑ d = 1 ⌊ n i ⌋ ∑ d 1 = 1 ⌊ n i ⌋ f ( d d 1 i ) μ ( d 1 ) 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) f(i)=d=1∑⌊in⌋d1=1∑⌊in⌋f(dd1i)μ(d1)
设 T = d d 1 T=dd1 T=dd1,则:
f ( i ) = ∑ T = 1 ⌊ n i ⌋ ∑ d = 1 ⌊ n i ⌋ f ( T i ) μ ( T d ) 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)=T=1∑⌊in⌋d=1∑⌊in⌋f(Ti)μ(dT)f ( i ) = ∑ T = 1 ⌊ n i ⌋ f ( T i ) [ ∑ d = 1 ⌊ n i ⌋ μ ( 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)=T=1∑⌊in⌋f(Ti)[d=1∑⌊in⌋μ(dT)]
f ( i ) = ∑ T = 1 ⌊ n i ⌋ f ( T i ) [ ∑ d 1 ∣ T μ ( d 1 ) ] f(i)=\sum_{T=1}^{\lfloor \frac{n}{i} \rfloor}f(Ti)[\sum_{d_1|T}\mu(d_1)] f(i)=T=1∑⌊in⌋f(Ti)[d1∣T∑μ(d1)]
根据莫比乌斯函数的性质二
∑ d ∣ n μ ( d ) = { 1 , n = 1 0 , n ≠ 1 \sum_{d|n}\mu(d)= \begin{cases} 1,\quad n=1\\ 0, \quad n\neq1 \end{cases} d∣n∑μ(d)={1,n=10,n=1
当 T = 1 T=1 T=1时, ∑ d 1 ∣ T μ ( d 1 ) = 1 \sum_{d_1|T}\mu(d_1)=1 ∑d1∣Tμ(d1)=1, f ( i ) [ ∑ d 1 ∣ T μ ( d 1 ) ] = f ( i ) μ ( 1 ) = f ( i ) f(i)[\sum_{d_1|T}\mu(d_1)]=f(i)\mu(1)=f(i) f(i)[∑d1∣Tμ(d1)]=f(i)μ(1)=f(i)当 T ≠ 1 T\neq1 T=1时, ∑ d 1 ∣ T μ ( d 1 ) = 0 \sum_{d_1|T}\mu(d_1)=0 ∑d1∣Tμ(d1)=0, f ( T i ) [ ∑ d 1 ∣ T μ ( d 1 ) ] = 0 f(Ti)[\sum_{d_1|T}\mu(d_1)]=0 f(Ti)[∑d1∣Tμ(d1)]=0
综上,
f ( i ) = ∑ T = 1 ⌊ n i ⌋ f ( T i ) [ ∑ d 1 ∣ T μ ( d 1 ) ] = f ( i ) f(i)=\sum_{T=1}^{\lfloor \frac{n}{i} \rfloor}f(Ti)[\sum_{d_1|T}\mu(d_1)]=f(i) f(i)=T=1∑⌊in⌋f(Ti)[d1∣T∑μ(d1)]=f(i)
2 3 2 形式二(整除形式)
f ( i ) = ∑ d ∣ i g ( d ) ⇒ g ( i ) = ∑ d ∣ i f ( i d ) μ ( d ) f(i)=\sum_{d|i}g(d)\Rightarrow g(i)=\sum_{d|i}f(\frac{i}{d})\mu(d) f(i)=d∣i∑g(d)⇒g(i)=d∣i∑f(di)μ(d)
就是一般形式
2 4 性质
f ( n ) 是积性函数 ⇔ g ( n ) 是积性函数 f(n)是积性函数\Leftrightarrow g(n)是积性函数 f(n)是积性函数⇔g(n)是积性函数
3 应用
3 1 [HAOI2011]Problem b
3 1 1 题目大意
求当 i ∈ [ a , b ] , j ∈ [ c , d ] i∈[a,b],j∈[c,d] i∈[a,b],j∈[c,d],满足 g c d ( i , j ) = k gcd(i,j)=k gcd(i,j)=k的数对 ( i , j ) (i,j) (i,j)的个数
即
a
n
s
=
∑
i
=
a
b
∑
j
=
c
d
[
g
c
d
(
i
,
j
)
=
k
]
ans=\sum_{i=a}^{b}\sum_{j=c}^{d}[gcd(i,j)=k]
ans=i=a∑bj=c∑d[gcd(i,j)=k]
3 1 2 SOLUTION
定义函数 f f f
f ( n , m ) = ∑ i = 1 n ∑ j = 1 m [ g c d ( i , j ) = k ] f(n,m)=\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=k] f(n,m)=∑i=1n∑j=1m[gcd(i,j)=k]
显然 a n s ans ans可以由函数 f f f 容斥得到
a n s = f ( c , d ) − f ( a − 1 , d ) − f ( b , c − 1 ) + f ( a − 1 , c − 1 ) ans=f(c,d)−f(a−1,d)−f(b,c−1)+f(a−1,c−1) ans=f(c,d)−f(a−1,d)−f(b,c−1)+f(a−1,c−1)
现在考虑怎么求 f f f
根据1 1 4*超级实用的公式可得
f
(
n
,
m
)
=
∑
i
=
1
n
∑
j
=
1
m
[
g
c
d
(
i
,
j
)
=
k
]
f(n,m)=\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)=k]
f(n,m)=i=1∑nj=1∑m[gcd(i,j)=k]
f ( n , m ) = ∑ i = 1 ⌊ n k ⌋ ∑ j = 1 ⌊ m k ⌋ ∑ d ∣ g c d ( i , j ) μ ( d ) f(n,m)=\sum_{i=1}^{\lfloor\frac{n}{k}\rfloor}\sum_{j=1}^{\lfloor\frac{m}{k}\rfloor}\sum_{d|gcd(i,j)}\mu(d) f(n,m)=i=1∑⌊kn⌋j=1∑⌊km⌋d∣gcd(i,j)∑μ(d)
枚举 d ′ = d g c d d'=\frac{d}{gcd} d′=gcdd
f ( n , m ) = ∑ d = 1 m i n ( ⌊ n k ⌋ , ⌊ m k ⌋ ) μ ( d ) g ( k d ) f(n,m)=\sum_{d=1}^{min(\lfloor\frac{n}{k}\rfloor,\lfloor\frac{m}{k}\rfloor)}\mu(d)g(kd) f(n,m)=d=1∑min(⌊kn⌋,⌊km⌋)μ(d)g(kd)
g ( d ) 表示 i [ 1 , n ] , j [ 1 , m ] 满足 d ∣ g c d ( x , y ) 的对数 g(d)表示i[1,n],j[1,m]满足d|gcd(x,y)的对数 g(d)表示i[1,n],j[1,m]满足d∣gcd(x,y)的对数
显然可以知道 g ( d ) = ⌊ n d ⌋ ⌊ m d ⌋ 显然可以知道g(d)=\lfloor\frac{n}{d}\rfloor\lfloor\frac{m}{d}\rfloor 显然可以知道g(d)=⌊dn⌋⌊dm⌋
f ( n , m ) = ∑ d = 1 m i n ( ⌊ n k ⌋ , ⌊ m k ⌋ ) μ ( d ) × ⌊ n k d ⌋ × ⌊ m k d ⌋ f(n,m)=\sum_{d=1}^{min(\lfloor\frac{n}{k}\rfloor,\lfloor\frac{m}{k}\rfloor)}\mu(d)\times\lfloor\frac{n}{kd}\rfloor\times\lfloor\frac{m}{kd}\rfloor f(n,m)=d=1∑min(⌊kn⌋,⌊km⌋)μ(d)×⌊kdn⌋×⌊kdm⌋
浅谈莫比乌斯反演 - 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;
}
「BZOJ2693」jzptab
【BZOJ2693】jzptab - yoyoball - 博客园 (cnblogs.com)
搞半天发现这个模数搞错了。。。。尬住了,ԾㅂԾ,
[BZOJ4407]于神之怒加强版 - 租酥雨 - 博客园 (cnblogs.com)
枚举倍数真的是一个非常常见并且常用的套路啊!!
4 后话
整除分块 - pengym - 博客园 (cnblogs.com)
最后,我想说莫比乌斯反演-让我们从基础开始 - An_Account 的博客 - 洛谷博客 (luogu.com.cn)这篇博客非常的实用(just tell you the sercet of the common probelms’ solution),但是如果想彻底了解的话,我们还是老老实实学吧…( _ _)ノ|
完结撒花❀
★,°:.☆( ̄▽ ̄)/$:.°★ 。