莫某某的反演似乎有很多形式, 但不用太在意, 多关注常用的就行了。
莫某某的反演可以直接用容斥证明, 但有一种 “证明方法” 更易令人信服(并记住), 下面会介绍这种 “证明方法”。
数论函数及其加减数乘运算
即定义域为正整数的函数。
简单的例子:
(epsilon(n) = [n=1])
( ext{1}(n) = 1)
( ext{id}_k(n) = n^k)
(sigma_k(n) = sum_{d|n} d^k)
加减法
(( ext{f} pm ext{g})(n) = ext{f}(n) pm ext{g}(n))
数乘
(k) 为整数, ((x ext{f})(n) = x · ext{f}(n))
数论函数的狄利克雷卷积运算及其性质
定义两个数论函数的 狄利克雷卷积 运算(二元算符 (*))如下:
若 ( ext{h} = ext{f} * ext{g}), 则:
数论函数的狄利克雷卷积运算满足 交换律、结合律和对加法的分配律, 可以自己验证一下。
(用狄利克雷卷积的另一种写法 (( ext{f}* ext{g})(n) = sum_{ij=n} ext{f}(i) ext{g}(j)) 会更容易验证)
幺元(单位元)
狄利克雷卷积的幺元为 (epsilon(n) = [n=1]), 即对任意数论函数 ( ext{t}) 有 ( ext{t} * epsilon = ext{t})。
逆元
对于每个 ( ext{f}(1)
eq 0) 的数论函数 ( ext{f}), 都存在一个函数 ( ext{g}) 使得 ( ext{f} * ext{g} = epsilon) 。
数论函数求逆(( ext{f}(1) eq 0))
积性函数及其性质
满足 (m ot n) 时 ( ext f(nm) = ext f (n) ext f (m)) 的数论函数 ( ext f) 称为 积性函数, 若无需满足 (m ot n) 就有 ( ext f(nm) = ext f (n) ext f (m)), 那么 ( ext f) 被称为完全积性函数。
完全积性函数的例子:
(epsilon(n) = [n=1])
( ext{id}_k(n) = n^k)
( ext 1(n) = 1)
积性函数的例子:
(sigma_k(n) = sum_{d|n} d^k)
(varphi(n) = sum_{i=1}^{n-1} [i ot n])
性质1:两个积性函数的狄利克雷卷积仍然是积性函数
性质2:积性函数的逆是积性函数
证明以后再说吧。
莫比乌斯反演
(mu * ext 1 = epsilon), 故
还有另一方向上的莫比乌斯反演, 在这不述。
什么是 (mu)?
由于 ( ext 1) 是积性函数, 所以作为其逆的 (mu) 也是积性函数, 那么从参数 (p^k ;;(p in {prime}, k ge 0)) 开始:
(( ext 1 * mu)(1) = mu(1) = [1=1] = 1), 故 (mu(1) = 1) 。
(( ext 1 * mu)(p^1) = mu(1) + mu(p^1) = [p^1 = 1] = 0), 故 (mu(p_1) = -1) 。
依着这个思路, 可得 (mu(p^2) = 0), 再用归纳法就可得 (mu(p^k) = 0 ;;(k>1))。
所以, 对于一般的 (n in N_+),
通过例题学习基本技巧与小 trick(待补)
基本套路
最常见的套路
对于 (sum_{1 le i,j le n} ext f(gcd(i,j))) 来说, 如果能找到 ( ext g) 使得 ( ext f = ext g * ext 1), 那么就有:
由于一个广为人知的式子: (sum_{a_i in A} a_i = sum_{a_i} a_i * (:a_i在A中出现的次数:)), 有
(i,j) 的上界不同时也差不多。
整除分块
定理:对于一个固定的正整数 (n) 和正整数 (k in [1,n]), (lfloor frac{n}{k}
floor) 最多有 (O(sqrt n)) 种, 且使得值为 (q) 的最大的 (k) 为 (lfloor frac{n}{q}
floor)。
证明:再补吧。
应用:整除函数 (Div_k(n) = lfloor frac{k}{n}
floor) 是递减函数, 由此衍生出应用。
本题用不到的小trick
( ext{id}(n) = n), ( ext{id} = ext 1 * varphi)
更高级的套路
怎么化这个式子?
解:
枚举 (T = kd),
计算 (mu * ext t) 的技巧
定义
其中, (p_i) 是第 (i) 小的质数。
结论:那么 (mu = q_1 * q_2 * cdots)
证明:如果看下这个式子 ((q_1 * q_2 * cdots )(n)= sum_{i_1i_2cdots = n} q_1(i_1)q_2(i_2)cdots) ,还是挺显然的。
以此的算法及其复杂度:算法很显然, 将一个函数卷上 (q_i), 需要 (O(frac{n}{p_i})) 的时间, 卷上 (q_1, q_2, cdots) 就需要 (O(sum_{p_i le n} frac{n}{p_i}) = O(n loglog n)) 的时间。(不会证, 但肯定优于 (O(n log n)))