杜教筛、Min25筛

posted on 2025-09-22 13:44:08 | under | source

杜教筛

欲求 \(Sf(n)=\sum\limits_{i=1}^{n} f(i)\),构造 \(f\times g=h\),那么 \(\sum h=\sum\limits_{ij\le n} f(i)g(j)\),进而得到杜教筛核心式子:

\[g(1)Sf(n)=Sh(n)-\sum\limits_{i=2}^{n}g(i)Sf(\frac {n}i) \]

便能整除分块递归下去,所以还顺带做了块筛。

直接做是 \(O(n^{\frac 34})\),顺带一提,不用记忆化。可以线性筛预处理 \(\le n^{\frac 23}\) 的,这样便是 \(O(\frac 23)\)

限制:积性函数 \(g,h\) 需要足够简洁,以快速求出前缀和。

Min_25 筛

欲求 \(f\) 前缀和,构造一个在质数处与之相同的完全积性函数 \(g\)

大致思想:将 \(f\) 分质数合数讨论,合数可递推,质数可用 \(g\) 计算。而递推的状态设计基于最小的质数 \(p\),这样的好处是:特判掉质数的情况,那么有用的 \(p\le \sqrt n\)

记号:\(mi(x)\)\(x\) 的最小质因子,\(p_i\) 为从小到大第 \(i\) 个质数,\(P\)\(\le \sqrt n\) 的质数集合。

注意下面的 \(G,F\) 都不包含 \(1\)

处理 g

\(G(n,j)=\sum\limits_{i} g(i)(i\in {\rm P}\mid mi(i)>p_j)\),欲求 \(G(n,|P|)\),初值 \(G(n,0)=\sum g\)

考虑从 \(G(n,j-1)\) 推到 \(G(n,j)\),减去 \(mi(x)=p_j\) 的即可:

\[G(n,j)=G(n,j-1)-g(p_j)\times(G(\frac n{p_j},j-1)-\sum\limits_{k=1}^{j-1}g({p_k})) \]

处理 f

\(F(n,j)=\sum\limits_{i} f(i)(mi(i)>p_j)\)

  • 质数:\(G(n,|P|)-\sum\limits_{k=1}^{j} f(k)\)
  • 合数,枚举最小质因子及次数:\(\sum\limits_{k>j}\sum\limits_{e=1}^{{p_k}^e\le n} f({p_k}^e)\times (F(\frac n{{p_k}^e},k)+[e>1])\)

\([e>1]\) 是因为 \({p_k}^e\)\(e>1\) 时应被算入。

复杂度 & 小技巧

根据神秘分析,求 \(F\) 无需记忆化,\(O(\frac {n^{\frac 34}}{\log n})\)

\(G\) 需要记忆化,注意到每次递归会除一个数,而 \(\frac {\frac na}b=\frac {n}{ab}\)。于是只用处理 \(\frac nk\) 的值(都是下取整),根号级别。

技巧:\(x\le \sqrt n\)\(id1(x)\) 记录,\(x>\sqrt n\)\(id2({\frac nx})\) 记录。

posted @ 2026-01-14 17:47  Zwi  阅读(0)  评论(0)    收藏  举报