首页 > 技术文章 > 莫比乌斯反演学习笔记

Cmd2001 2017-12-17 21:43 原文

其实这些东西早在9月就学了,然而那时理解还不是很清楚。今天上课正式讲到,就来把这个坑填上,主要是复习不熟悉的东西了。

 

首先先明确几个数论函数:

欧拉函数(φ):φ(n)表示1~n中与n互质的数的个数

莫比乌斯函数(μ):μ(1)=1,若n(n>1)含有多重质因数,则μ(n)=0,否则 μ(n)=(-1)r,r表示n的质因数个数

常函数(1):∀n∈N,1(n)=1

单位函数(id):∀n∈N,id(n)=n

幂函数(idk):∀n∈N,idk(n)=nk

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

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

除数函数(σ):一类函数,每个非负整数x都对应一个除数函数σx,σx(n)表示 n的因数的x次方之和

 

还有一个定义:

狄利克雷卷积函数:(fxg)(n) = sigma(d|n)f(d)g(n/d)。

 

这些是基本的前置技能了,如果不明白,请反复阅读直到理解为止。

 

然后我们有4个关于以上函数的结论:

φ x 1 = id,证明:若n为质数,则id。其他情况用积性函数证明。

μ x id = φ,这个以后能够证明。

μ x 1 = ε,证明:考虑每个质数选几个,用二项式定理确定系数,带进去后发现和为0。

ε × 1 = 1,证明:每个数为1的因数只有1,显然。

注意这里的x都表示求狄利克雷卷积。

 

通过以上的结论(μ x 1 = 1,ε × 1 = 1),我们猜想对于一般的积性函数(f(x),g(x)),是否存在:f × 1 = g↔μ × g = f

这个是正确的,证明如下:

考虑从左到右:

考虑从右到左:

至此莫比乌斯反演基本定理得证。

 

根据以上的证明我们可以总结出一些小技巧:

  1. 四个卷积结论:φ×1=id、μ×id=φ、μ×1=ε、ε×1=1(需要注意的是,更多的时候是从右到左的应用)
  2. 分块的前提结论:∀n,d∈N,n/d向下取整至多有√n种取值
  3. gcd与lcm相关:gcd(a,b)*a*b=lcm(a,b),d|gcd(a,b)→d|a且d|b
  4. 交换求和号的方法技巧,以及常见的求和号交换法
  5. 对于多次询问的题目,预处理积性函数的值与前缀和

具体的用法还得在题目中说明。

 

当然了,如果面对多次询问φ(n)与μ(n)的值与前缀和可以预处理出来,而N/d向下取整M/d向下取整分别最多有和种取值,所以说我们只用枚举这两部分的取值,中间整块的部分用前缀和相减即得积性函数的和。

时间复杂度:O(min(N,M)+T(+)),其中T表示数据组数。

代码实现:

1 int t = min(n, m), ans = 0;
2 for (int i = 1, j = 1; i <= t; i = j + 1) {
3     j = min(n / ( n / i), m / (m / i));
4     ans += (summu[j] - summu[i - 1]) * (n / i) * (m / j);
5 }

 

然后就是具体的题目了,不想多写了,插入公式实在太费劲了QAQ。(留坑以后再说!)

说白了就是本蒟蒻太弱了不会用LaTeX,被迫用Word2016做了半天公式后心态爆炸了……

推荐阅读