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

质数·积性函数·筛法

质数

定义

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

唯一分解定理

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


n=paii n = ∏ p i a i

其中 pi p i 是质数

同时该分解是唯一的

积性函数

数论函数

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

积性函数

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

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

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

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

常见的积性函数

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

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

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

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

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

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

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

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

单位函数 id(n)=n i d ( n ) = n

加粗为完全积性函数

欧拉函数


n=paii n = ∏ p i a i


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

两个重要的结论

  • d|nφ(d)=n ∑ d | n φ ( d ) = n
    • [1,n] [ 1 , n ] 中,满足 gcd(x,n)=nd g c d ( x , n ) = n d x x φ(d)
  • (d,n)=1d=nφ(n)2 ∑ ( d , n ) = 1 d = 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 = 1 k p i

重要结论

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

证明:

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

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

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

简单来说,就是一种运算

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

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

性质

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

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

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

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

h(n)=d|nf(d)ε(nd)=f(n) h ( n ) = ∑ d | n f ( d ) ε ( n d ) = 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 ( n l o g l o g n )

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

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

Hn=i=11i H n = ∑ i = 1 1 i

Hnln(n) H n ∼ l n ( n )

ni=1ninln(n) ∴ ∑ i = 1 n n i ≤ n l n ( n )

形如埃氏筛的循环方式的复杂度 O(nln(n)) O ( n l n ( 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] p r i [ j ] 一定是 ipri[j] i ⋅ p r i [ j ] 的最小质因子

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

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

φ(iphi[j])=phi[j]φ(i) ∴ φ ( i ⋅ p h i [ j ] ) = p h i [ 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ε=f f ⋅ ε = f

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

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

g(m)=d|mf(d)f(m)=d|mg(d)μ(md) g ( m ) = ∑ d | m f ( d ) ⇔ f ( m ) = ∑ d | m g ( d ) μ ( m d )

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

    • 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 | m g ( d ) μ ( m d ) = ∑ d | m μ ( d ) g ( m d ) = ∑ d | m μ ( d ) ∑ d ′ | ( m / d ) f ( d ′ ) = ∑ d ′ | m f ( d ′ ) ∑ d | ( m / d ′ ) μ ( d ) = ∑ d ′ | m f ( d ′ ) ⋅ e [ m / d ′ = 1 ] = f ( m )
  • 若已知 f(m)=d|mg(d)μ(md) f ( m ) = ∑ d | m g ( d ) μ ( m d ) ,如何推出 g(m)=d|mf(d) g ( m ) = ∑ d | m f ( 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 | m f ( d ) = ∑ d | m ∑ d ′ | d g ( d ′ ) μ ( d d ′ ) = ∑ d ′ | m g ( d ′ ) ∑ d | ( m / d ′ ) μ ( d ) = ∑ d ′ | m g ( 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 ) = i d ( n )

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

另一个角度理解这个式子

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

φ(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=1pi m = ∏ i = 1 k p i

其中 pi ∀ p i 是n的质因子

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

C1k+C2kC3k=C0k=1 − C k 1 + C k 2 − C k 3 ⋯ = − C k 0 = − 1

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

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

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

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值