从 PN 筛到红场阅兵:一二维积性函数筛法总结

从 PN 筛到红场阅兵:一二维积性函数筛法总结

PN 筛

引入

Powerful Number 筛,简称 PN 筛,又称扩展杜教筛,是一个用于快速求取特定积性函数前缀和的算法。

PN 筛对积性函数提出以下要求:

  • 存在积性函数 \(g\),满足:
    • \(g\) 前缀和易求;
    • \(\forall p \in \mathbb{P}\),有 \(g(p) = f(p)\)

Powerful Number

定义

对于正整数 \(n\),记 \(n = \prod\limits p_i^{k_i}\)\(p_i\) 为第 \(i\) 个质数),若满足 \(\forall i, k_i > 1\),则称 \(n\) 是 PN。

Lemma 1

所有 PN 均可以表示为 \(a^2b^3\) 的形式。

证明:等价于命题:\(\forall k > 1, \exists x, y \ge 0\) 满足 \(k = 2x + 3y\)。不难发下这等价于 \(k = 2(x + y) + y\),分为奇偶讨论即可得证。

Lemma 2

\(1 \sim n\) 范围内的 PN 个数是 \(\mathcal O(\sqrt n)\) 的。

提供两种证明方式:

  • 证明 1:考虑将求和强化为积分:\(\displaystyle\int_1^{\sqrt n} (\dfrac{n}{x^2})^{1 \over 3} \approx \sqrt n\)
  • 证明 2:考虑缩放,对于 \([2^k, 2^{k + 1})\) 的部分视为相同的,可以写出:\(\sum\limits_{k = 1}^{\log(\sqrt n)}(\dfrac{n}{4^k})^{1 \over 3} \times 2^k = n^{1 \over 3} \sum\limits_{k = 1}^{\log(\sqrt n)}2^{k \over 3} \approx \sqrt n\)

过程

考虑找一个易求前缀和的积性函数 \(g\),满足 \(\forall p \in \mathbb P\)\(g(p) = f(p)\)。构造函数 \(h = f / g\)(除法为狄利克雷除法),可以发现 \(h\) 具有以下性质:

  • \(h\) 为积性函数,\(h(1) = 1\)
  • \(h(p) = 0\),证明考虑 \(f(p) = g(p)h(1) + g(1)h(p)\),又 \(g(p) = f(p)\)

由积性函数的性质,我们可以推到出一个衍生结论:\(h\) 仅在 PN 出有值。

于是有:

\[\begin{align*} \sum\limits_{i \le n} f(i) &= \sum\limits_{k \le n} \sum\limits_{d | k} h(d)g(\frac{k}{d}) \\ &= \sum\limits_{d \le n \land d \text{ is PN}} h(d) \sum\limits_{k \le \lfloor \frac{n}{d} \rfloor} g(k) \end{align*} \]

考虑用深搜找出所有 PN,在点值处统计答案,\(h\) 在质数处的点值可以考虑用逐位确定的方法求出。

复杂度

时空复杂度均与 PN 同阶,\(\mathcal O(\sqrt n \log^k n)\)\(\log\) 因子视情况和实现而定。

Min_25 筛

引入

Min_25 最早发明的积性函数筛法,又称扩展埃氏筛。

Min_25 筛对积性函数提出以下要求:

  • \(f(p)(p \in \mathbb{P})\) 是一个关于 \(p\) 项数合理的多项式;
  • 易求 \(f(p^c)\) 点值。

约定 & 记号

约定无特殊说明时,\(p \in \mathbb P\)

\(\newcommand\fp{F_{\mathbb P}} \fp(n) = \sum\limits_{p \le n}f(p)\)

\(\newcommand\fc{\operatorname{lpf}} \fc(n) = \min\limits_{p | n} p\)\(F_k(n) = \sum\limits_{i \le n \land \fc(i) > p_k} f(i)\),约定 \(p_0 = 1\)

过程

观察 \(F_k\) 的定义不难发现所求即为 \(F_0(n) + 1\)

计算 \(F_k\)

枚举每个数的最小质因子不难有递推式:

\[\begin{align*} F_k(n) &= \sum\limits_{i \le n}[\fc(i) > p_k] f(i) \\ &= \fp(n) - \fp(p_k) + \sum\limits_{t > k}\sum\limits_{c \ge 1, p_t^c \le n} f(p_t^c) (F_t(\frac{n}{p_t^c}) + [c > 1]) \end{align*} \]

具体的即分为质数和合数两部分考虑贡献。

由于若 \(p_t^2 > n\),则 \(p_t > \dfrac{n}{p_t}\),即合数部分贡献为 \(0\),所以仅 \(p_t \le \sqrt n\)\(t\) 有用。

发现除去 \(\fp(p_k)\) 的部分实际上与 \(k\) 无关,所以假设我们已经知道了 \(\fp(n)\) 并筛出了 \(1 \sim \sqrt n\) 内的质数,可以从大到小枚举转移点 \(t\),即可做到 \(\mathcal O(\sqrt n)\) 空间筛 \(F_k\)

计算 \(\fp(n)\)

注意到 \(f(p)\) 是合理次多项式,所以我们考虑分开计算多项式每一项的贡献,令 \(g(p) = p^s\),不难发现这是完全积性函数,不难用插值计算 \(\sum\limits_{i \le n} g(i)\) 的值。于是我们的目标变成筛除 \(1 \sim n\) 中的合数贡献。

发现合数的最小因子时 \(\sqrt n\) 级别的,设计 \(G_k(n) = \sum\limits_{i \le n}[\fc(i) > k \lor i \in \mathbb P] g(i)\),即埃氏筛 \(k\) 轮后的贡献。注意到与埃氏筛的联系后不难有递推式:

\[\begin{align*} G_k(n) &= \sum\limits_{i \le n}[\fc(i) > k \lor i \in \mathbb P] g(i) \\ &= G_{k - 1}(n) - g(p_k)(G_{k - 1}(\frac{n}{p_k}) - G_{\mathbb P}(p_{k - 1})) \end{align*} \]

具体的即考虑筛除最小因子为 \(p_k\) 的部分在将质数的贡献加回来,显然只有当 \(p_k \le \sqrt n\) 时才有转移贡献。

复杂度

考虑到仅有 \(\lfloor \dfrac{n}{x} \rfloor\)\(\sqrt n\) 个点值需要考虑,所以空间复杂度 \(\mathcal O(\sqrt n)\)

时间复杂度 \(\mathcal O(\dfrac{n^{\frac{3}{4}}}{\log n})\),证明不太会。

二维积性函数

引入

考虑定义二维数论函数 \(f(i, j)\)积性的,当且仅当:任意 \(ab \bot cd\),有 \(f(ac, bd) = f(a, b) \times f(c, d)\)

形式化的表达:若 \(A = \prod p_i^{a_i}, B = \prod p_i^{b_i}\),则有 \(f(A, B) = \prod f(p^{a_i}, p^{b_i})\)

同样可以定义二维狄利克雷卷积:\((f \times g)(n, m) = \sum\limits_{u | n, v | m} f(u, v)g(\dfrac{n}{u}, \dfrac{n}{v})\),通过逐位确定可以类似定义狄利克雷除法。

红场阅兵

积性函数 \(S\):满足 \(S(p)\) 为给定二次函数,求 \(\sum\limits_{i \le n} \sum\limits_{j \le n} S(ij)\)

数据范围:\(n \le 10^9\),提交地址:https://uoj.ac/contest/88/problem/885

定义二维积性函数 \(f(i, j) = S(ij)\),所求即为 \(f\) 的二维前缀和,记 \(F(n) = \sum\limits_{i \le n} S(i)\)

算法一

类似 PN 筛的思想,考虑设计二维积性函数 \(g\) 满足 \(g(p^a, p^b) = S(p^a)S(p^b) = f(p^a, 1)f(1, p^b)\)。令 \(h = f / g\),于是不难发现对于任意 \(k\)\(h(1, p^k) = h(p^k, 1) = 0\)

于是能将答案简化为:

\[\begin{align*} \sum\limits_{i \le n} \sum\limits_{j \le n} f(i, j) &= \sum\limits_{i, j \le n} \sum\limits_{u | i, v | j} h(i, j) g(i / u, j / v) \\ &= \sum\limits_{i, j} h(i, j) \sum\limits_{u \le n / i, v \le n / j} g(u, v) \\ &= \sum\limits_{i, j} h(i, j) F(\dfrac{n}{i}) F(\dfrac{n}{j}) \end{align*} \]

考虑用 Min_25 筛出 \(F\) 的所需点值,那么这个算法的时间复杂度实际上是 \(\mathcal O(n)\) 的。

算法二

进一步的可以继续设计函数 \(g_3\)\(g_3(x, y)\) 有值当且仅当 \(x = y\),且值为 \(h(x, x)\)。那么同样的套路启发我们考虑 \(h^\prime = h / g_3\),可以发现此时 \(h^\prime(p^a, p^b)\) 有值就当且仅当 \(a, b > 0 \land a \ne b\)

通过枚举 \(h^\prime\) 有值的所有位置 \((u, v)\),记 \(A = n / u, B = n / v\),我们将问题转化为计算:

\[\begin{align*} \sum\limits_{i \le A, j \le B} (g_3 \times g)(i, j) &= \sum\limits_{i \le A, j \le B} \sum\limits_{x | i, y | j} g_3(x, y) g(i / x, j / y) \\ &= \sum\limits_{i \le A, j \le B} \sum\limits_{d | i, d | j} g_3(d, d) g(i / d, j / d) \\ &= \sum\limits_{d} g_3(d, d) \sum\limits_{i \le A / d, j \le B / d} g(i, j) \\ &= \sum\limits_{d} g_3(d, d) F(A / d) F(B / d) \end{align*} \]

假设我们筛出了 \(g_3\) 的前缀和,那么不难用整出分块优化这部分的计算,不难做到 \(\mathcal O(\sqrt A + \sqrt B)\) 单次询问。事实上,我们发现 \(A, B\) 是等价的,可以随意交换,于是不失一般性的假设 \(A > B\)。如果我们考虑将 \(A\) 相同的询问统一处理,复杂度就是 \(\mathcal O(\sqrt A + \sum\limits_i \sqrt B)\),可以减少一半的常数。

注意到由于 \(g_3(p, p) = h(p, p) = f(p, p) - g(p, p) = S(p^2) -S^2(p)\) 是一个四次多项式,而 \(g_3(p^k)(k > 1)\) 的点值均可筛出,所以 \(g_3\) 是符合 Min_25 筛的使用条件的!于是筛法解决即可。

复杂度

实际上上述算法除了 \(g_3\)\(S\) 的前缀和的部分是 \(\mathcal O(n^{\frac{2}{3}} \log n)\) 的,下面给出证明:

考虑记 \(v(i, j)\) 表示 \(h^\prime(i, j)\) 是否有值,不难发现 \(v(i, j)\) 是积性函数,且 \(v(p^a, p^b) = [a, b > 0 \land a \ne b]\)。接下来我们要估计 \(\sum\limits_{i, j \le n} v(i, j)\) 的上界。

考虑设计积性函数 \(v_1, v_2\) 满足 \(v_1(p^a, p^b) = [a = 1, b = 2 \lor a = 2, b = 1], v_2(p^a, p^b) = v(p^a, p^b) - v_1(p^a, p^b)\)。不难发现 \((v_1 \times v_2)(i, j) \ge v(i, j)\)

考虑分析 \(\sum\limits_{i \le n, j \le m} v_1(i, j)\):如果按 \(a = 2\) 还是 \(b = 2\) 分类,则能将 \((i, j)\) 写成 \((a^2b, b^2a)\) 的形式,于是有原式等于 \(\sum\limits_{a^2 \le n, a \le m} \min(n / a^2, \sqrt{m / a})\);设 \(B = \sqrt[3]{\dfrac{n^2}{m}}\),原式等于 \(\sum\limits_{a \le B} \sqrt{\dfrac{m}{a}} + \sum\limits_{B < a \le \sqrt n} \dfrac{n}{a^2} \approx \sqrt{mB} + \dfrac{n}{B} = (nm)^{\frac{1}{3}}\)

考虑 \(v_1 \times v_2\),其前缀和不超过 \(\sum\limits_{x, y, v_2(x, y) > 0, xy \le nm} (\dfrac{nm}{xy})^{1 / 3}\)。这里要用到 zky 给出了一个结论:

对满足存在序列 \(a\)(序列非负且为常数次多项式级别),使得 \(f(p^k) = a_k(k \ge 1)\),的一维积性函数前缀和级别不会超过 \(\mathcal O(n^{1 / p} \log^{p - 1} n)\) 其中 \(p\)\(a\) 第一个有值的位置。

基于这个结论,我们可以认为 \(\sum\limits_{xy \le L} v_2(x, y)\)\(\mathcal O(L^{1/ 4} \log L)\)

我们考虑应用上述 PN 筛中提到的二进制分组的分析方法,具体的将 \(\lfloor \log(xy) \rfloor\)\((x, y)\) 分到一组,记于是上式可以估计成:

\[\sum\limits_{k = 0}^{\log(nm) - 1} k 2^{\frac{k}{4}} (\dfrac{nm}{2^k})^{\frac{1}{3}} = (nm)^{\frac{1}{3}} \sum\limits_{k = 0}^{\log(nm) - 1} k 2^{-\frac{k}{12}} \approx (nm)^{\frac{1}{3}} \]

于是 \(v_(i, j)\) 的前缀和也就是 \(\mathcal O((nm)^{\frac{1}{3}})\) 的了!

考虑分析第二部分的复杂度,即:

\[\sum\limits_{x, y} v(x, y)\min(x, y, \sqrt{n / x} + \sqrt{m / y}) \]

不妨认为 \(n, m\) 同阶,则 \(\min(x, y, \sqrt{n / x} + \sqrt{n / y}) \le \min(x, \sqrt{n / y}) + \min(y, \sqrt{n / x})\),不难发现两部分是对称的,只取一部分分析。大约是:

\[\begin{align*} \sum\limits_{i, j} v(i, j) \min(x, \sqrt{n / y}) &= \sum_{x, y} v(x, y)\sum\limits_{tx \le n, t^2y \le n} 1 \\ &= \sum\limits_{t^2 \le n} \sum\limits_{x \le n / t, y \le n / t^2} v(x, y) \\ &= \sum\limits_{t \le \sqrt n} (\dfrac{n^2}{t^3})^{1 / 3} \\ &\approx \mathcal O(n^{2 / 3} \log n) \end{align*} \]

这个复杂度就足够优秀了!

posted @ 2024-06-17 22:18  JWRuixi  阅读(19)  评论(0编辑  收藏  举报