简述 min_25 筛之前的积性函数求和基本技术

Carl Friedrich Gauss 曾说过,“凡是有自尊心的建筑师,在瑰丽的大厦建成之后,决不会把脚手架留在那里。”. 鉴于网上的杜教筛等等的博客其实写的不是很本质,在这里试图阐释一下杜教筛和 PN 筛的主要思路 .

(然而虽然我也可能写的不是很本质)

期望读者掌握基本的数论知识,如果读者认为本文存在内容的缺漏或错误,请在评论区指出,我会在收到后第一时间处理 .

(里面有些名字纯属笔者瞎编,没有什么科学依据)

1. 基本工具

1.1. 记号约定

积性函数:数论函数 \(f\) 满足 \(f(1)=1\),并且对于 \(n\perp m\) 满足 \(f(n\cdot m)=f(n)\cdot f(m)\) .

对于数论函数 \(f,g\),其 Dirichlet 卷积

\[(f*g)_n=\sum_{d\mid n}f(d)g\left(\dfrac nd\right) \]

\(\mathbb P\) 是素数集,\(\mathrm S\) 是前缀和算子,\(\Delta=\mathrm S^{-1}\) 是(平移一位的)差分算子 .

1.2. Dirichlet 生成函数

对于数论函数 \(f\),定义其 Dirichlet 生成函数(简称 DGF):

\[F(x)=\sum_{n\ge0}f(n)\dfrac1{n^x} \]

那么显然有 \(f*g\) 的 DGF 为 \(f,g\) 的 DGF 之积 .

Euler 乘积公式:对于积性函数 \(f\),其 DGF

\[F(x)=\prod_{p\in\mathbb P}\sum_{i\ge0}\dfrac{f(p^i)}{p^{ix}} \]

严格证明比较复杂,可以纯粹感性理解一下(

Riemann-zeta 函数:\(\zeta(x)=\sum_{n\ge 1}\frac1{n^x}\) . 常见的 DGF:

  • \(F(x-k)\):点乘 \(\mathrm{Id}_k\) .
  • \(F(kx)\)\(x\) 位置的数移动到 \(x^k\) 位置 .
  • \(\mathrm{Id}_k\)\(\zeta(x-k)\) .
  • \(\mu\)\(\frac1{\zeta(x)}\) .
  • \(\varphi\)\(\frac{\zeta(x-1)}{\zeta(x)}\) .

1.3. Bell 级数

对于积性函数 \(f\),定义其在素数 \(p\) 意义下的 Bell 级数:

\[F_p(x)=\sum_{i\ge0}f(p^i)x^i \]

那么显然有 \(f*g\) 的 Bell 级数为 \(f,g\) 的 Bell 级数之积 .

常见的 Bell 级数:

  • \(F_p(cx)\):点乘 \(c^{\Omega}\) .
  • \(F_p(p^kx)\):点乘 \(\mathrm{Id}_k\) .
  • \(\mathrm{Id}_k\)\(\frac1{1-p^kx}\) .
  • \(\mu\)\(1-x\) .
  • \(\varphi\)\(\frac{1-x}{1-px}\) .

相对于 Dirichlet 生成函数,Bell 级数给出了积性函数在每一维上的具体表现 .

2. 杜教筛机理

2.1. 整除 Dirichlet 卷积

定义两个数论函数 \(f,g\) 的整除 Dirichlet 卷积

\[(f\mathbin\square g)(n)=\sum_{i=1}^nf(i)g\left(\left\lfloor\dfrac ni\right\rfloor\right) \]

则有 \(f*g=h\iff f\mathbin\square \mathrm S g=\mathrm S h\),具体可以考虑

\[\begin{aligned}\sum_{i=1}^nh(i)&=\sum_{i=1}^n\sum_{d\mid i}f(d)g\left(\dfrac id\right)\\&=\sum_{d=1}^nf(d)\sum_{i=1}^{\lfloor\frac nd\rfloor}g(i)\end{aligned} \]

进一步可以通过 Möbius 反演导出 \(\square\) 的反演关系:

\[f=g\mathbin\square h\iff g*\Delta h=\Delta f\iff g^{-1}*\Delta f=\Delta h\iff h=g^{-1}\mathbin\square f \]

2.2. 块筛卷积

\(f\)\(n\) 处的块筛就是说 \(\sum f\) 在每个 \(\lfloor\frac ni\rfloor\) 处的点值(容易发现总共只有不超过 \(2\sqrt n\) 个这样的位置) .

对于 \(f*g=h\),如果已知 \(f,g\) 的块筛,怎么求 \(h\) 的块筛?可以直接使用整除 Dirichlet 卷积和普通 Dirichlet 卷积的关系解决:

\[\mathrm Sh(i)=\sum_{d=1}^nf(d)\mathrm Sg\left(\left\lfloor\frac nd\right\rfloor\right) \]

对于 \(f*g=h\),如果已知 \(f,h\) 的块筛,怎么求 \(f\) 的块筛?这样的技巧通常被称作“杜教筛”,可以对上式移项解决:

\[\mathrm Sf(n)=\mathrm Sh(n)-\sum_{i=2}^ng(i)\mathrm Sf\left(\left\lfloor\dfrac ni\right\rfloor\right) \]

OI 中常见的杜教筛是这样的流程:如果通过某些技术能快速求出 \(g,h\) 的块筛,试图求 \(f\) 的块筛 . 只需线性筛预处理出 \(<n^{2/3}\)\(f\),更大规模的 \(f\) 递归处理(需要通过某些技术每轮 \(\lfloor\frac ni\rfloor\) 相同的位置统一处理),这样容易通过积分分析出时间复杂度为 \(\Theta(n^{2/3})\) .

3. 稀疏块筛卷积

有没有感觉,杜教筛要知道两个块筛还是太昂贵了??

3.1. Powerful Number 筛

Powerful Number(简称 PN)是指每个素数的次数都不为 1 的数 . 根据 Bézout 定理可以简单导出 PN 即为形如 \(a^2b^3\) 的数 .

关键性质:不大于 \(n\) 的 PN 个数是 \(O(\sqrt n)\) 的,容易通过积分估阶:

\[\#\mathrm{PN}\le\int_1^{\sqrt n}\sqrt[3]{\dfrac n{x^2}}=\Theta(\sqrt n) \]

容易发现,一个积性函数 \(f\) 只在 PN 处有值当且仅当它的 Bell 级数在模 \(x^2\) 意义下为 \(1\) .

对于积性函数 \(f\),如果构造函数 \(g\) 满足对于素数 \(p\)\(f(p)=g(p)\)(素数拟合),则容易发现其 Bell 级数满足关系 \(F_p(x)\equiv G_p(x)\pmod{x^2}\),从而 \(h=f/g\) 显然只在 PN 处有值 .

使用块筛卷积的技术:

\[\mathrm Sf(i)=\sum_{d=1}^nh(d)\mathrm Sg\left(\left\lfloor\frac nd\right\rfloor\right) \]

这里 \(h\) 只在 PN 处有值,这样的位置只有 \(O(\sqrt n)\) 个 . 那么如果能求出 \(g\) 的块筛就能在 \(O(\sqrt n)\) 时间内求出 \(h\) 的一处点值 . 这就是 OI 中通常被称为“Powerful Number 筛”的技术了 .

3.2. 完全平方筛

对于积性函数 \(f,g\)(其 Bell 级数为 \(F_p(x),G_p(x)\)),若 Bell 级数 \(\frac{G_p(x)}{F_p(-x)}\) 的前缀和和 Bell 级数 \(F_p(x)F_p(-x)\) 的单点可以快速计算,那么可以使用完全平方筛求 \(f*g\) 的前缀和 .

主要思路就是注意到

\[F_p(x)G_p(x)=F_p(x)F_p(-x)\cdot\dfrac{G_p(x)}{F_p(-x)} \]

由于 \(F_p(x)F_p(-x)\)\(x^2\) 的倍数,那么它只在完全平方数处有值 . 从而可以使用块筛卷积,过程类似 Powerful Number 筛,不再详细展开 .

下面以\(\mu^2*1\) 的前缀和演示这种技术的使用方法:取 \(f=\mu^2,\,g=1\),那么要求 \(f*g\) 的前缀和,此处 \(F_p(x)=1+x\) . 注意到:

\[\dfrac{1+x}{1-x}=(1-x^2)\cdot\dfrac1{(1-x)^2} \]

那么只需要求 \(\frac1{(1-x)^2}\)(也就是约数个数函数 \(d\))的前缀和和 \((1-x^2)\) 的单点(平凡),如果使用 \(\Theta(\sqrt n)\) 的算法求 \(d\) 的前缀和,时间复杂度可以通过积分估阶:

\[\int_1^{\sqrt n}\left(\dfrac n{x^2}\right)^{1/2}=O(\sqrt n\log n) \]

如果使用 DIVCNT1 求 \(d\) 的前缀和,甚至可以去掉 log . 一个另外的例子 .

posted @ 2025-05-23 21:59  Jijidawang  阅读(261)  评论(3)    收藏  举报
😅​