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  阅读(174)  评论(0)    收藏  举报