【进阶】数论函数求和(理论)
下面默认所有数论函数都是积性函数。
无穷元多项式
对于积性函数 \(f\),我们设计一个无穷元生成函数 \(A(x_1,x_2,...)\),其中 \(x_i\) 的次数对应第 \(i\) 个质数 \(p_i\) 的次数 \(c_i\)。
可以写出:
容易得知该生成函数是每个元对应的一元生成函数的总乘积。
-
贝尔级数:对于每个元 \(x\),我们定义 \(F(x)\) 为该元的一元生成函数,那么 \(F(x)\) 称为贝尔级数。
常见积性函数的贝尔级数:- \(I\xrightarrow{\text{B.S.}} 1+x+x^2+... = \dfrac 1 {1 - x}\)
- \(\varepsilon \xrightarrow{\text{B.S.}} 1\)
- \(Id_k \xrightarrow{\text{B.S.}} 1 + p^kx + p^{2k}x^2 + p^{3k}x^3 + ... = \dfrac 1 {1 - p^kx}\)
- \(\mu \xrightarrow{\text{B.S.}} 1 - x\)
- \(\varphi \xrightarrow{\text{B.S.}} 1 + (p - 1)\sum\limits_{i = 1}p^{i - 1}x^i = 1 + \dfrac {(p - 1)x}{1 - px}\)
- \(d \xrightarrow{\text{B.S.}} 1 + 2x + 3x^2 + 4x^3 = \dfrac 1 {(1 - x) ^ 2}\)
- \(\sigma_k \xrightarrow{\text{B.S.}} \sum\limits_{i = 0} x^i \sum\limits_{j = 0} ^ i p^{jk} = \dfrac 1 {(1 - x)(1 - p^kx)}\)
这也证实了 \(\mu * I = \varepsilon\) 以及其他关系。
高维变换
将每个多项式的元作为一个维度,那么有无穷个维度。对于给定的 \(n\),设 \(p_k\) 为 \(n\) 以内最大的质数,那么我们保留前 \(k\) 维。
和 FWT 几乎一模一样,我们可以对其进行高维前缀和/后缀和,或者做差分。
-
\(\gcd\) 的本质:设两个数 \(a,b\) 在每个质因子处的次数分别为 \(\{a_1,a_2,...,a_k\}\) 和 \(\{b_1,b_2,...,b_k\}\),那么 \(\gcd(a,b)\) 的次数为 \(\{\min(a_1,b_1),\min(a_2,b_2),...,\min(a_k,b_k)\}\)。
-
\(\text{lcm}\) 的本质:设两个数 \(a,b\) 在每个质因子处的次数分别为 \(\{a_1,a_2,...,a_k\}\) 和 \(\{b_1,b_2,...,b_k\}\),那么 \(\text{lcm}(a,b)\) 的次数为 \(\{\max(a_1,b_1),\max(a_2,b_2),...,\max(a_k,b_k)\}\)。
-
莫比乌斯反演的本质:莫比乌斯反演其实是对高维数组进行差分,差分的方式是容斥。
所以,我们做一些莫比乌斯反演题目,可能完全不需要求莫比乌斯函数!利用 FWT 高维差分方式,同样可以实现莫反的效果,而且时间复杂度降到 \(O(n\log\log n)\)。
- 莫反问题的本质:莫反的本质是高位变换,变换求的其实就是 \(\gcd\) 卷积,这样我们可以直接用 FWT 中 and 卷积的方法——先做一遍高位后缀和,然后再差分回去。
Powerful Number
- 定义:不存在次数为 \(1\) 的质因子的正整数,下面简称 PN。
由此可以得到 PN 的表示方式:\(a^2b^3\),其中 \(b\) 不存在平方因子,这构成单射。
PN 有一个十分优秀的性质:\(n\) 以内 PN 的数量为 \(O(\sqrt n)\)。
证明
PN 可表示为 $a^2b^3$,可得 $b\le \sqrt[3]{\dfrac n{a^2}}$ $$\begin{aligned} O(\sum_{a = 1}^{\sqrt n} \left(\frac n{a^2}\right)^{\frac 13}) &= O(n^{\frac 13} \sum_{a = 1}^{\sqrt n} a^{-\frac 23}) \\ &= O(n^{\frac 13} \cdot n^{\frac 16}) \\ &= O(\sqrt n) \end{aligned}$$- 质数拟合:对于积性函数 \(f\),我们构造一个积性函数 \(g\),满足在每个质数 \(p\) 处都有 \(f(p)=g(p)\),但对于 \(k\ge 2\) 不一定满足 \(f(p^k)=g(p^k)\)。
考虑此时我们需要求 \(S_f(n)\),我们可以拟合一个 \(g\),并且 \(g\) 的块筛是可求的。设 \(f = g * h\),则
现在的任务是求出 \(h\)。注意到对于每个质数 \(p\),都有 \(f(p) = g(p)h(1) + g(1)h(p) = g(p) + h(p)\),而又知 \(f(p) = g(p)\) 可得 \(h(p)\)。
由于 \(f,g\) 都是积性函数,所以 \(h\) 也是积性函数,这说明当 \(i\) 中存在 \(1\) 次质因子时,\(h(i) = 0\),那么 \(h\) 只有在 PN 处有值!
所以我们可以爆搜找出 \(n\) 以内的所有 PN 并按质因子分开计算出对应的 \(h\) 值,这部分时间复杂度为 \(O(\sqrt n)\)。
若 \(S_g\) 需要利用杜教筛求出,时间复杂度为 \(O(n^{\frac 23})\)。