Min25 筛

Min25 初定义

  • Min25 筛可以在 \(O(\frac{n^{\frac{3}{4}}}{\log n})\)\(O(n^{1-e})\) 的复杂度下解决一类 积性函数 前缀和的问题
  • 对于质数 \(p\) ,要求 \(f(p)\) 是一个关于 \(p\) 的项数较少的多项式或可以快速求值,\(f(p^c)\) 可以快速求值
  • 因为多项式可以拆成若干个单项式,所以我们只需要考虑求出 \(f(p)=p^k\) 的前缀和,然后每一项加起来就行了

前置约定

  • 下面若无特殊规定 \(p\) 为全体质数集合

  • \(minp(x)\) 表示 \(x\) 的最小质因数

  • \(isprime(x)\) 表示 \(x\) 是否是一个质数

  • \(p_k\) 表示第 \(k\) 个质数,特殊的 \(p_0=1\)

分类

  • 对于质数和合数进行分类:

\[\sum_{i=1}^n f_(i)=\sum_{1\leq p\leq n} f(p)+\sum_{1\leq p^e\leq n,1\leq p \leq \sqrt n} f(p^e)(\sum_{1\leq i\leq n/p^e,minp(i)>p} f(i)) \]

  • 那么整个式子就变成了两个部分,第一部分是所有质数的 \(f\) 之和,另一部分是枚举最小质因子后,求所有最小质因子大于这个质因子的 \(f\) 之和

第一部分

  • 我们考虑线性求出所有质数的 \(f\)

  • 我们考虑一个 DP 的思路,设 \(g(n,i)\) ,给定 \(k\)

\[g(n,j)=\sum_{i=1}^n [\operatorname{isprime(i) || minp(i)}>p_j] i^k \]

  • 这里的 \(k\) 就是给定的低阶多项式的一项

  • 注意到 \(i^k\)完全积性函数

  • 其实这个式子就是欧拉筛 \(k\) 轮后剩下的数的 \(k\) 次方的和

  • 考虑 \(g(n,j-1)\) 怎么转移过来

\[g(n,j)=g(n,j-1)-p_j^k(g(\frac{n}{p_j},j-1)-g(p_{j-1,j-1})) \]

  • 大概即使考虑第 \(j\) 轮回筛掉哪些数,把这些数的 \(p_j\) 这个质因数拿出来,因为是完全积性函数所以是正确的

  • 对于后面一项是为了将质数去掉

  • 注意到 \(g(p_{j-1},j-1)\) 实际上就是前 \(j-1\) 个质数的 \(k\) 次方和

  • 对于一个合数 \(x\)\(minp(x)\leq \sqrt n\) ,所以实际上我们需要的 \(p_j\leq \sqrt n\)

  • 我们设 \(S_n=\sum_{i=1}^n p_i^k\) ,表示前 \(n\) 个质数的 \(k\) 次方和

  • \(1\)\(n\) 的所有质数的 \(k\) 次方和其实就是 \(g(n,x)\) ,其中 \(p_x\) 是最后一个 \(\leq \sqrt n\) 的质数,我们记这个为 \(g(n)\)

  • 我们知道一个重要的结论:

\[\lfloor \frac{\lfloor\frac{n}{a}\rfloor}{b}\rfloor=\lfloor\frac{n}{ab}\rfloor \]

  • 所以实际上我们只需要 \(O(\sqrt n)\) 个点值

求解答案

  • 答案就是先求出所有质数的函数和,然后枚举一个 \(p^e\) ,再枚举最小质因子大于 \(p\) 的数

  • \(S(n,x)\) 表示求 \(1\)\(n\) 中所有最小质因子大于 \(p_x\) 的函数值之和,可以发现答案就是 \(S(n,0)+1\)

  • 我们将满足条件的数分成两部分,第一部分就是大于 \(p_x\) 的质数,也就是 \(g(n)-S(x)\) ,另一个部分就是最小质因子大于 \(p_x\) 的合数,考虑枚举最小质因子:

\[S(n,x)=g(n)-S_x+\sum_{p_k^e\leq n \& k>x} f(p_k^e)(S(\frac{n}{p_k^e},k)+[e\neq 1]) \]

  • 然后我们就可以递归解决这个问题了
  • 这里其实就体现为什么要求 \(f(p)\)\(f(p^c)\) 要可以快速求值
  • 根据某玄学定理,不需要记忆化

实现细节

  1. 预处理出前 \(\sqrt n\)\(S\) 的值

  2. 对于 \(\sqrt n\) 个我们可能会涉及到的点值进行编号,这里运用了一点技巧,我们将小于 \(\sqrt n\) 的用一个数组存,大于 \(\sqrt n\) 用一个数组存,当然也可以直接用 map 但是常数略大

  3. 然后递推求解 \(g\) 函数

  4. 递归求解 \(S\) 函数

基础例题

求莫比乌斯函数的前缀和,即 \(\sum_{i=1}^n\mu (i)\)

  • 这个函数是积性函数,并且 \(f(p)=(-1),f(p^e,e\geq 2)=0\)
  • \(g(x)=-1\) ,这个是完全积性函数,那么 \(g(n,0)=-n+1\) ,然后预处理出前 \(\sqrt n\) 有多少个质数就可以了

求欧拉函数的前缀和,即 \(\sum_{i=1}^n \varphi(i)\)

  • 这个也是积性函数,并且 \(f(p)=p-1\)\(f(p^e)=p^e-p^{e-1}\) ,可以快速插值
  • \(g(x)=x-1\) ,对于一次项 \(G1(n,0)=\frac{n(n+1)}{2}-1\),对于常数项就是 \(-n+1\) ,预处理出前 \(\sqrt n\) 个质数和和个数就可以了

#6053. 简单的函数

  • 首先这个函数是积性函数,\(f(p^c)=p\bigoplus c\) ,可以快速插值,那么就考虑质数的求法了
  • \(f(p)=p\bigoplus 1\) ,预处理好说,对于 \(G(n,0)=\sum_{i=1}^n i\bigoplus 1\) 对于奇偶数分一下类就行了

进阶例题

\(S(n,k)\) 表示范围为 \([1,n]\) ,质数幂次和为 \(k\) 个数的个数,对于前 \(\log n\)\(k\)\(S(n,k)\)

  • \(f(x)\)\(x\) 的质数幂次和,\(f(ab)=f(a)+f(b)\) ,感觉和积性函数没有半毛钱关系,但是其实满足 完全积性函数的特质 ,具体看 \(g\) 的求法
  • 我们一个个分析最终的式子
  • \(g(n,j,k)\)\(n,j\) 的意义同上,质数幂次和为 \(k\) 的数的个数

\[g(n,j,k)=g(n,j-1,k)+(g(n/p_j,j,k-1)-g(p_{j-1},j-1,k-1)) \]

  • 我们仍然可以将 \(p_j\) 这一项提出来
  • 对于 \(\sqrt n\) 个前缀的质数的贡献可以直接预处理出来,然后突然发现答案就是求 \(g(n,0,k)\) ,然后就没了

Min25 再定义

  • 所以 Min25 筛的本质应该是它的 dp 的思想,不一定要和积性函数有关,也不一定要是低阶多项式,这也导致了它的适用性较杜教筛要广,非常的灵活
  • 对于一个函数可以按照 Min25 的步骤一步步的去分析和构造辅助函数
posted @ 2022-06-08 11:43  Kzos_017  阅读(69)  评论(0编辑  收藏  举报