其实这些东西早在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=id、μ×id=φ、μ×1=ε、ε×1=1(需要注意的是,更多的时候是从右到左的应用)
- 分块的前提结论:∀n,d∈N,n/d向下取整至多有√n种取值
- gcd与lcm相关:gcd(a,b)*a*b=lcm(a,b),d|gcd(a,b)→d|a且d|b
- 交换求和号的方法技巧,以及常见的求和号交换法
- 对于多次询问的题目,预处理积性函数的值与前缀和
具体的用法还得在题目中说明。
当然了,如果面对多次询问φ(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做了半天公式后心态爆炸了……