莫比乌斯反演与其前置技能

质数·积性函数·筛法

质数

定义

大于 1 的、只被 1 和它本身整除的正整数

唯一分解定理

对于正整数 n,我们一定可以将其写为若干个质数的幂的乘积形式


n=paiin=∏piai

其中pipi是质数

同时该分解是唯一的

积性函数

数论函数

若有函数f(n)f(n) 的定义域为正整数,值域为复数,称为数论函数

积性函数

若数论函数f(n)f(n)满足:对于互质pqp、q,有 f(pq)=f(p)f(q)f(p⋅q)=f(p)⋅f(q)称为积性函数

进一步地,若数论函数 f(n)f(n) 满足:对于任意 pqp、q,有 f(pq)=f(p)f(q)f(p⋅q)=f(p)⋅f(q)称为完全积性函数

积性函数f(1)=1f(1)=1

积性函数的乘积也是积性函数

常见的积性函数

除数函数σk(n)σk(n),表示n的约数的k次幂和

约数和函数σ1(n)σ1(n),或σ(n)σ(n)

约数个数函数τ(n)τ(n),一般也写为d(n)d(n)

欧拉函数φ(n)φ(n)

莫比乌斯函数μ(n)μ(n)

元函数ee,这是一个由命题映射到N的特殊函数,e[P]=1当且仅当P为真,否则e[P]=0

狄利克雷卷积单位函数ε(n)=n==1?1:0

常函数1(n)=11(n)=1

单位函数id(n)=nid(n)=n

加粗为完全积性函数

欧拉函数


n=paiin=∏piai


φ(n)=n(11pi)φ(n)=n⋅∏(1−1pi)

两个重要的结论
  • d|nφ(d)=n∑d|nφ(d)=n
    • [1,n][1,n]中,满足gcd(x,n)=ndgcd(x,n)=ndxxφ(d)
  • (d,n)=1d=nφ(n)2∑(d,n)=1d=n⋅φ(n)2
    • φ(1)φ(1),欧拉函数都是偶数
    • (x,n)=1(x,n)=1,那么(nx,n)=1(n−x,n)=1

莫比乌斯函数

μ(n)={0,n(1)k,n=ki=1piμ(n)={0,n有平方因子(−1)k,n=∏i=1kpi

重要结论

d|nμ(d)=ε(n)∑d|nμ(d)=ε(n)

证明:

  • n=1,显然成立
  • n>1

  • 首先不需要考虑含有平方因子的d

  • 也就是说,如果n=pdiin=∏pidi,那么相当于n=pin=∏pi
  • d|nμ(d)=(1)ki=1&i%2=1Cin+1ki=0&i%2=0Cin=0∑d|nμ(d)=(−1)∑i=1&i%2=1kCni+1∑i=0&i%2=0kCni=0
  • n>1时,ε(n)=0ε(n)=0
Dirichlet卷积

简单来说,就是一种运算

h(n)=d|nf(d)g(nd)h(n)=∑d|nf(d)g(nd)

h(n)h(n)即为f,g两个函数狄利克雷卷积后得到的新函数

性质

1.积性函数的狄利克雷卷积仍然满足积性

2.完全积性函数的狄利克雷卷积不一定满足完全积性

3.Dirichlet 卷积同时也具有交换律、分配律

4.Dirichlet 卷积运算存在单位元:fε=εf=ff⋅ε=ε⋅f=f

h(n)=d|nf(d)ε(nd)=f(n)h(n)=∑d|nf(d)ε(nd)=f(n)

筛法

筛法的重点不是筛什么,而是筛的顺序

比如埃氏筛和线性筛虽然大部分情况用于筛素数

但是其思想可以被运用到更广的领域

一些题会需要你在可以接受的复杂度内筛出需要的函数

这就需要筛法的思想

埃拉托斯特尼筛

筛素数

for(int i=2;i<=e;++i)
    if(!vis[i])
         for(int j=i*i;j<=n;j+=i)
             vis[j]=1;

复杂度O(nloglogn)O(nloglogn)

以下证明其复杂度不超过O(nln(n))O(nln(n))

ni=1ni=nni=11i∑i=1nni=n∑i=1n1i

Hn=i=11iHn=∑i=11i

Hnln(n)Hn∼ln(n)

ni=1ninln(n)∴∑i=1nni≤nln(n)

形如埃氏筛的循环方式的复杂度O(nln(n))O(nln(n))

筛欧拉函数

void euler(){
    for(int i=1;i<=n;++i) phi[i]=i;
    for(int i=2;i<=n;++i)
        if(phi[i]==i)
            for(int j=i;j<=n;j+=i) //必须从i开始
                phi[j]=phi[j]/i*(i-1);
}

与筛素数的区别在于,一个数只要被标记一次即可认定它不是素数

而欧拉函数的计算必须考虑n的所有质因子的贡献

线性筛

一种复杂度O(n)O(n),基于积性函数的筛法

用处非常多,需要在理解的基础上记忆代码

筛素数

for(int i=2;i<=n;++i){
      if(!vis[i]) p[++cnt]=i;
      for(int j=1;j<=cnt&&i*p[j]<=n;++j){
          vis[i*p[j]]=1;
          if(i%p[j]==0) break;
    }
}

所以为什么是O(n)O(n)的?

每个数只会被其最小的质因子筛掉

break的原因:如果此时已经有i%p[j]==0,那么p[j+1],p[j+2]…就不可能再是i*p[j+1],i *p[j+2]的最小质因子

筛欧拉函数

phi[1]=1;
for(int i=2;i<=N;++i){
    if(!vis[i]){
        pri[++tot]=i;
        phi[i]=i-1;
    }
    for(int j=1;j<=tot&&1ll*i*pri[j]<=N;++j){
        vis[i*pri[j]]=1;
        if(i%pri[j]==0){
            phi[i*pri[j]]=phi[i]*pri[j];
            break;
        }
        phi[i*pri[j]]=phi[i]*(pri[j]-1);
    }
}

phi,pri不要手残打反QWQ

解释一下第九行

此时的pri[j]pri[j]一定是ipri[j]i⋅pri[j]的最小质因子

φ(i)=n(11pj)φ(i)=n⋅∏(1−1pj)

11pri[j]1−1pri[j]已经计算过

φ(iphi[j])=phi[j]φ(i)∴φ(i⋅phi[j])=phi[j]⋅φ(i)

筛莫比乌斯函数

mu[1]=1;
for(int i=2;i<=N;++i){
    if(!vis[i]){
        pri[++tot]=i;
        mu[i]=-1;
    }
    for(int j=1;j<=tot&&1ll*i*pri[j]<=N;++j){
        vis[i*pri[j]]=1;
        if(i%pri[j]==0){
            mu[i*pri[j]]=0;
            break;
        }
        mu[i*pri[j]]=-mu[i];
    }
}

基本上来说,线性筛积性函数只需要关注三个地方

质数怎么办,枚举到最小质因子怎么办,互质怎么办

莫比乌斯反演

还记得d|nμ(d)=ε(n)∑d|nμ(d)=ε(n)

另外,fε=ff⋅ε=f

表示狄利克雷卷积(未必准确)

利用这些结论,如何证明:

g(m)=d|mf(d)f(m)=d|mg(d)μ(md)g(m)=∑d|mf(d)⇔f(m)=∑d|mg(d)μ(md)
  • 若已知g(m)=d|mf(d)g(m)=∑d|mf(d),如何推出f(m)=d|mg(d)μ(md)f(m)=∑d|mg(d)μ(md)

    • d|mg(d)μ(md)=d|mμ(d)g(md)=d|mμ(d)d|(m/d)f(d)=d|mf(d)d|(m/d)μ(d)=d|mf(d)e[m/d=1]=f(m)∑d|mg(d)μ(md)=∑d|mμ(d)g(md)=∑d|mμ(d)∑d′|(m/d)f(d′)=∑d′|mf(d′)∑d|(m/d′)μ(d)=∑d′|mf(d′)⋅e[m/d′=1]=f(m)
  • 若已知f(m)=d|mg(d)μ(md)f(m)=∑d|mg(d)μ(md),如何推出g(m)=d|mf(d)g(m)=∑d|mf(d)


    d|mf(d)=d|md|dg(d)μ(dd)=d|mg(d)d|(m/d)μ(d)=d|mg(d)e[m/d=1]=g(m)∑d|mf(d)=∑d|m∑d′|dg(d′)μ(dd′)=∑d′|mg(d′)∑d|(m/d′)μ(d)=∑d′|mg(d′)⋅e[m/d′=1]=g(m)

以上便是莫比乌斯反演定理


f1=gf=gμf⋅1=g⇔f=g⋅μ

当然,利用μ1=ϵμ⋅1=ϵ可以简单的推导:

f1=g若f⋅1=g

f1μ=gμ∴f⋅1⋅μ=g⋅μ

f=gμ∴f=g⋅μ

gμ=f若g⋅μ=f

gμ1=f1∴g⋅μ⋅1=f⋅1

f1=g∴f⋅1=g

比如现在有d|nφ(d)=n∑d|nφ(d)=n

可以表示成d|nφ(d)1(n/d)=id(n)∑d|nφ(d)⋅1(n/d)=id(n)

可以得出φ(n)=d|nμ(d)id(nd)φ(n)=∑d|nμ(d)id(nd)

另一个角度理解这个式子

尝试理解其实际含义,就像理解组合恒等式的实际意义

φ(12)=12φ(1)+6φ(2)+4φ(3)+3φ(4)+2φ(6)+1φ(12)φ(12)=12φ(1)+6φ(2)+4φ(3)+3φ(4)+2φ(6)+1φ(12)

=1264+0+2+0=4=12−6−4+0+2+0=4

对于一个数m=ki=1pim=∏i=1kpi

其中pi∀pi是n的质因子

m对φ(n)φ(n)的贡献为:

C1k+C2kC3k=C0k=1−Ck1+Ck2−Ck3⋯=−Ck0=−1

而这个数确实不是与n互质的数

莫比乌斯函数是与容斥原理有关的

有些题目同时可以从反演和容斥两个角度思考

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值