入土洲阁筛

写前吐槽一句。
洲阁筛可以说 , 从 \(2019.10\) 就开始我就开始尝试理解 , 今天看懂。
现存的洲阁筛博客中给我三种印象 : 少 , 异 , 链接失效。

但是还是有一些文章给了我一些帮助 :
\(\text{SemiWaker's blog}\) : 全面但是比较劝退 , 用来康式子的。
\(\text{阿波罗2003's Blog}\) : 比较好吧 , 不过蒿草啊。
\(\text{yyy_c_asm's blog}\) : 从 \(\text{DIVCNTcube}\) 来的 , 很友好 , 但是啃完以后感觉意犹未尽还是要把上面两篇啃完。(不然真的有些东西理解不了)
最后是可 爱 的 林 姐 姐 \(\text{alpha1022}\) 给予超多帮助。

标记 :

  • \(n^{\frac 1 2}=\left\lfloor \sqrt{n} \right\rfloor\)
  • \(i \in \text{Prime}\) : \(i\) 为质数。
  • \(p\) : \(p \in \text Z\)\(p \in \text{Prime}\)
  • \(\pi(n)\) : \(\sum\limits^n_{i=2} [i \in \text{Prime}]\)
  • \(\text p_i\) : 第 \(i\) 大的质数 , 如 \(\text p_3=5\)
  • \([a]\) : 艾佛森括号 , 若 \(a\) 成立则为 \(1\) , 否则为 \(0\)
  • \(x \perp y\) : 即 \((x,y)=1\) , 互质。
  • \(x|y\) : 即 \((x,y)=x\) , \(y\)\(x\) 的倍数。 \(\nmid\) 同理。
  • \(i \in [l,r)\) : 等同于 \(l \leq i < r\) , 意义为对于每一个满足此区间的 \(i\)

\(\text P1:\) 积性函数 / 洲阁筛前提,目的,复杂度

对于一个函数 \(f(x)\) , 若在 \(x \perp y\) 的前提下 , \(f(xy)=f(x) \times f(y)\)
常见的积性函数 , \(\mu\)\(\phi\) , 等等。

洲阁筛负责处理积性函数的前缀和 , 即 \(\sum\limits^n_{a=1} f(a)\) , 当 \(n \leq 10^{12}\) 时可以认为时间复杂度为 \(\frac {n^{\frac 3 4}}{\text{ln}\ n}\) , 表示为 \(\pi(n)n^{-\frac 1 4}\) 好像也没有什么问题。
对于一个积性函数 \(f(x)\) , 如果 \(f(p^k)\) 可以快速求出 , 那么就可以选择洲阁筛。

\(\text P2:\) 对式子进行拆分

定理 : 对于 \(i \in [1,n]\) , \(i\) 最多只有一个质因子大于 $n^{\frac 1 2} $ , 现象显然 , 证明略。
由此可以将 \(\sum\limits^n_{a=1} f(a)\) 拆分成 :

\[\begin{aligned} \sum\limits^n_{a=1} f(a) & = \sum\limits^n_{a=1} f(a) [i \text{ 有大于} n^{\frac 1 2} \text{的质因子}]+\sum\limits^n_{a=1} f(a) [i \text{ 无大于} n^{\frac 1 2} \text{的质因子}] \\ & = \left( \sum\limits^{ n^{\frac 1 2} }_{a=1} f(a) \sum\limits^{\left\lfloor\frac{n}{a}\right\rfloor}_{p= n^{\frac 1 2}+1} f(p) [p \in \text{Prime}] \right)+\left(\sum\limits^n_{a=1} f(a) [i \text{ 无大于} n^{\frac 1 2} \text{的质因子}]\right) \end{aligned}\]

因为质因数只有一个 , 所以拆分合理。\(p\) 枚举这个质因子。
而因为 \(p>a\)\(p \in \text{Prime}\) 所以 \(p \perp a\) , 所以 \(f(a)f(p)=f(ap)\)
可以发现 \(\sum\limits^{n^{\frac 1 2}}_{a=1} f(a)\) 是可以预处理的 , 然后就可以直接对 \(\left(\sum\limits^{\left\lfloor\frac{n}{a}\right\rfloor}_{p= n^{\frac 1 2}+1} f(p) [p \in \text{Prime}]\right)\)\(\left(\sum\limits^n_{a=1} f(a) [i \text{ 无大于} n^{\frac 1 2} \text{的质因子}]\right)\) 进行求解。

\(\text P3\) : 洲阁筛主体

\(\sum\limits^{\left\lfloor\frac{n}{a}\right\rfloor}_{p= n^{\frac 1 2}+1} f(p) [p \in \text{Prime}]\) 。设 \(g_{i,j}\) 意义为 \(1\)\(j\) 不是 \(\text p1,\text p2...\text p_{i}\) 其中任何一个或多个数的倍数的 \(f\) 值总和。考虑这个定义的内涵 , 如果一个数 \(a\) 且没有 \(<a^{\frac 1 2}\) 的质因子 , 那么 \(a \in \text{Prime}\)。所以如果我们要的答案是 \(g_{\pi(n^{\frac 1 2}),n}\) , 就等同于求 \(\sum\limits^{\left\lfloor\frac{n}{a}\right\rfloor}_{p= n^{\frac 1 2}+1} f(p) [p \in \text{Prime}]\)
需要注意的是 , 当 \(i=0\) 时 , 我们需要引入的是埃氏筛的思想 , 因为这个实际上是筛了 \(n^{\frac 1 2}\) 个质数的埃氏筛 , 所以边界 \(g_{0,j}=1\) , 也就是还没有开始就被筛掉的 \(1\)

可以推出 :

\[\large g_{i,j}=g_{i-1,j}-f(\text p_i)g_{i-1,\left\lfloor\frac{j}{\text p_i}\right\rfloor} \]

考虑正确性。增加了 \(\text p_i\) 的影响 , \(t \in [\text p_i,j] , \text p_i|t\) 的贡献都要减去。假设 \(b \times \text p_i=t\) , 则 \(b \in \ [1,\left\lfloor\frac{j}{\text p_i}\right\rfloor]\)。但是考虑一种 \(t\)\(\text p_i\)\(\text p_k..\) ,\(k \in [1,i)\) , 则 \(f(t)\) 的贡献已经被减掉过 , 所以 \(g_{i-1,\left\lfloor\frac{j}{\text p_i}\right\rfloor}\) 很好的表示了即减掉 \(\text p_k , k\in [1,i)\) 的贡献 , 这一类数即 \(f(b) , b \in [1,\left\lfloor\frac{j}{\text p_i}\right\rfloor] , \text p_ib \leq j\) , 减掉了 \(f(\text p_ib)\)\(f(t) , t \leq j , \text p_i | t\) 的贡献。
不知道为什么这一段的复杂度是 \(O(\pi(n))\) 的 , 需要优化。
考虑 \(\text p_i \ge j\) , 则 \([2,j]\) 的数都能被 \(\text p_1 \dots \text p_i\) 组成 , 只有 \(1\) 不行 , \(g_{i,j}=1\)
考虑 \(\text p_i \leq j < \text p_i^2\) , 则 \(\text p_i\)\(j\) 中的倍数只可能是 \(\text p_i\) , 为什么没有其他数字呢? 因为其他数字肯定可以由 \(\text p_1\dots \text p_{i-1}\) 组成 , 这些贡献已经被减掉了 , 所以它的倍数只能是 \(\text p_i \times 1,\text p_i \times \text p_i \dots\) , 而 \(\text p_i^2>j\) , 所以可以得到 \(g_{i,j}=g_{i-1,j}-f(\text p_i)\)。然后这一段的复杂度就变成了 \(\pi(n)n^{-\frac 1 4}\)
其实这一段有更加快速的做法 , 大概 \(O(\frac{n^{\frac 2 3}}{\log^{\frac 2 3} n})\) , 好像很不实用。

\(\left(\sum\limits^n_{a=1} f(a) [i \text{ 无大于} n^{\frac 1 2} \text{的质因子}]\right)\)。那么这些数一定可以用 \(\text p_1\dots \text p_{\pi(n^{\frac 1 2})}\) 组成 , 因为它们不由 \(\text p_b , b>\pi(n^{\frac 1 2})\) 构成。设 \(h_{i,j}\) 为质因子只包含 \(\text p_i \dots \text p_{\pi(n^{\frac 1 2})}\) , 注意这个地方为了后面优化所以倒过来了。显然我们要求的是 \(h_{1,j}\)。对于边界 \(h_{\pi(n^{\frac 1 2})+1,j}\) 很显然无意义 , 除了 \(1\) , \(h_{\pi(n^{\frac 1 2})+1,j}=1\)
考虑转移 :

\[\large h_{i,j}=h_{i+1,j}+\sum\limits^{\log_{\text p_i}(j)}_{e=1} f(\text p_i^e)h_{i+1,\left\lfloor\frac{j}{\text p_i^e}\right\rfloor} \]

看似很复杂 , 其实很容易理解。因为你要转移到 \(i\) , 那么就要加上由 \(\text p_i\) 组成的数的 \(f\) 和 , 而且这些数还不能被 $\text p_{i+1} \dots \text p_{\pi(n^{\frac 1 2})} $ 组成过 。由于 \(\text p_i^e\) 也有组成 , 既然要枚举所有的这类数 , 就必须全部贡献加上。所以有了后面这坨东西。
这东西又是 \(O(\pi(n))\) 的 , 又要考虑优化。
\(\text p_i \ge j\) 时 , \([2,j]\) 都不能被这一类数组成 , 但是 \(1\) 没有质因子 , \(h_{i,j}=1\)
\(\text p_i \leq j < \text p_i^2\) 时 , 容知递推式可以直接变为 \(h_{i+1,j}+f(\text p_i)h_{i+1,\left\lfloor\frac{j}{\text p_i}\right\rfloor}\) , 但是还是只有 \(\text p_i\) 有贡献 , 详见 \(g\) 的优化部分 , 所以这一段就是 \(h_{i,j}=h_{i+1,j}+f(\text p_i)\)
然后复杂度又变成了 \(O(\pi(n)n^{-\frac 1 4})\)

\(\text P4\) : 后语

总算写完 , 用了一节化学和一节政治。
解释还蛮多的 , 自我感觉不草。
一定要记住每一个的定义 , 关系式来的时候才能领悟。
p

posted @ 2020-04-03 16:54  _ARFA  阅读(150)  评论(0编辑  收藏  举报