一些杜教筛的构造方法

henry_qwh

2024-10-30 10:46:23

Algo. & Theory

贝尔级数和狄利克雷生成函数都是构造杜教筛的有力工具,熟练地运用它们可以方便地完成杜教筛的构造。

在阅读本文前,请确保自己已经掌握了杜教筛的基本原理。

贝尔级数

定义

定义数论函数 f(x) 在质数 p 意义下的贝尔级数为

f_p(x)=\sum_{i=0}^{\infty}f(p^i)x^i

这可以看作是数列 \{f(p^0),f(p^1),f(p^2),\cdots\} 的普通生成函数。

一些定理

定理一:f(x) 为完全积性函数,则 f_p(x)=\dfrac{1}{1-f(p)x}

证明:

\begin{aligned} f_p(x)&=\sum_{i=0}^\infty f(p^i)x^i\\ &=\sum_{i=0}^\infty f(p)^ix^i\\ &=\frac{1}{1-f(p)x} \end{aligned} \square

定理二: f_p\times g_p = (f*g)_p

证明:

\begin{aligned} (f*g)_p&=\sum_{i=0}^\infty (f*g)(p^i)x^i\\ &=\sum_{i=0}^\infty\sum_{j+k=i}f(p^j)g(p^k)x^i\\ &=\sum_{j=0}f(p^j)\sum_{i-k=j,k\ge 0}g(p^k)x^i\\ &=\sum_{j=0}^\infty f(p^j)\sum_{i=j}^\infty g(p^{i-j})x^i\\ &=\sum_{j=0}^\infty f(p^j)\sum_{i=0}^\infty g(p^i)x^{i+j}\\ &=f_p\times g_p \end{aligned} \square

定理三: f_p(x)=g_p(x)\iff f(x)=g(x)

证明:

必要性显然,现证明其充分性。

\begin{aligned} \forall x=\prod p_i^{a_i},f(x)=\prod f(p_i^{a_i})=\prod f_{p_i}(x)[a_i]=\prod g_{p_i}(x)[a_i]=g(x) \end{aligned} \square

这也是用贝尔级数构造杜教筛的基础。

一些常见的数论函数的贝尔级数:

\varepsilon_p(x)=1\\ 1_p(x)=\sum_{i=0}^\infty x^i=\frac{1}{1-x}\\ ({\operatorname{id_k}})_p(x)=\sum_{i=0}^\infty p^{ik}x^i=\frac{1}{1-p^kx}\\ \mu_p(x)=1_p(x)^{-1}=1-x\\ \mu^2_p(x)=1+x d_p(x)=\sum_{i=0}^\infty ix^i = \frac{1}{(1-x)^2} (\sigma_k)_p(x)=\sum_{i=0}^\infty x^i\sum_{j=0}^ip^{jk}=\frac{1}{(1-x)(1-p^kx)} \varphi_p(x)=1+\sum_{i=1}^\infty p^{i-1}(p-1)x^i=\frac{1-x}{1-px}

数论函数的点积也会对贝尔级数造成影响。一般地,f(x) 点积 \varepsilon(x) 会变成 \varepsilon_p(x),点积 1(x) 则不变,点积 \operatorname{id_k} 会使 x 变成 p^kx。例如:

(\mu\cdot\operatorname{id_k})_p(x) = 1-p^kx\\ (\varphi\cdot\operatorname{id_k})_p(x)=\frac{1-p^kx}{1-p^{k+1}x}

一些题目

  1. 求函数 f(p^k)=p^k+\lbrack k>0\rbrack(-1)^k 的前缀和。

我们写出 f(x) 的贝尔级数为:

f_p(x) = 1+\sum_{i=1}^\infty (p^i+(-1)^i)x^i=\frac{1}{1-px}+\frac{1}{1+x}-1

考虑构造数论函数 g(x),使得 g_p(x)=(1-px)(1+x)。此时 h_p(x)=(f*g)_p(x)=f_p(x)\times g_p(x)=1+px^2

观察到 \mu_p(x)=1-x, (\mu\cdot\operatorname{id})_p(x)=(1-px),则 g_p(x)=(\mu^2\cdot\operatorname{id})_p(x),由定理三可知 g(x)=\mu^2\cdot\operatorname{id}

可得 h(n)0 当且仅当 n 所有素因子次数均为 2S_{h(n)}=\sum\limits_{d-1}^{\sqrt{n}}i\mu^2(i)。这是很易求的。

  1. Sum of (-1)^f(n)

求函数 \lambda(n)=(-1)^{f(i)} 的前缀和。其中 f(n)n 质因数分解后各质因子的次数和。

考虑求 \lambda(n) 的贝尔级数。

\begin{aligned} \lambda_p(n)&=\sum_{i=0}^\infty\lambda(p^i)x^i\\ &=\sum_{i=0}^\infty(-1)^ix^i\\ &=\frac{1}{1+x} \end{aligned}

考虑构造 g_p(x)=1+x,此时 \lambda_p(x)\times g_p(x)=1。显然 g_p(x)=\mu_p^2(x),由定理三可知 g(x)=\mu^2(x)。而 (\lambda*g)_p(x)=\lambda_p(x)\times g_p(x)=1=\varepsilon_p(x),有 \lambda*g=\varepsilon。而 \mu^2(x) 的前缀和是易求的(具体可以参考 P4318 完全平方数),可以据此进行杜教筛求解。时间复杂度 O(n^{\frac{2}{3}})

  1. 定义数论函数 f(x) = \mu^2 * (\operatorname{id}\times \mu),求 \sum\limits_{i=1}^nf(i)

我们写出 f(x) 的贝尔级数 f_p(x)

\begin{aligned} f_p(x)&=(\mu^2 * (\operatorname{id}\times \mu))_p\\ &=\mu^2_p\times (\operatorname{id}\times \mu)_p\\ &=(1+x)(1-px) \end{aligned}

发现 f_p(x)\times \operatorname{id}_p(x)=1+x=\mu^2_p(x),由定理二可知 f_p(x)\times \operatorname{id}_p(x)=(f * \operatorname{id})_p,由定理三可知 f * \operatorname{id}=\mu^2,于是即可用杜教筛求解。

狄利克雷生成函数

定义

对于一个数论函数 f,定义其 DGF(狄利克雷生成函数)为:

\tilde{f}(x) = \sum_{i = 1}^{\infty}\frac{f(i)}{i^x}

简单数论函数的 DGF

\begin{aligned} \tilde{\varepsilon}(x) &= 1 \\ \tilde{1}(x) &= \sum_{i = 1}^{\infty}\frac{1}{i^x} = \zeta(x)\\ \tilde{\operatorname{id}_ k}(x) &= \sum_{i = 1}^{\infty}\frac{i^k}{i^x}= \zeta(x-k) \end{aligned}

欧拉乘积公式

对于积性函数 f,有:

\tilde{f}(x) = \prod_{i = 1}^{\infty}\sum_{a=0}^{\infty}\frac{f(p_i^a)}{p_i^{ax}}

证明:

先写出前几项:

\begin{aligned} \prod_{i = 1}^{\infty}\sum_{a=0}^{\infty}\frac{f(p_i^a)}{p_i^x} &= \prod_{i = 1}^{\infty}\left(1+\frac{f(p_i)}{p_i^x}+\frac{f(p_i^2)}{p_i^{2x}} + \cdots\right)\\ &=\left(1+\frac{f(2)}{2^x}+\frac{f(4)}{4^x} + \cdots\right)\left(1+\frac{f(3)}{3^x}+\frac{f(9)}{9^{x}} + \cdots\right)\cdots\\ &= 1 + \frac{f(2)}{2^x} + \frac{f(3)}{3^x} + \frac{f(4)}{4^x} + \frac{f(5)}{5^x} + \frac{f(6)}{6^x} + \cdots \end{aligned}

考虑唯一分解定理,对于任意的正整数 n = \prod_{i=1}^m p_i^{c_i},对应的就是在 p_i 的幂次中选择第 c_i+1 项,显然这个式子展开后会取到每一个正整数,并且只会出现一次。

那么我们可以根据这个公式写出一些较为复杂的函数的 DGF。

我们重新推导 \tilde{1},得到 \zeta(x) 的新式子。

\tilde{1}(x) = \prod_{i = 1}^{\infty}\sum_{a=0}^{\infty}\frac{1}{p_i^{ax}} = \prod_{i = 1}^{\infty}\frac{p_i^x}{p_i^x - 1} = \prod_{p}\frac{1}{1 - p^{-x}} = \zeta(x)

因为 \varphi(p^0) = 1,\varphi(p^a) = p^a - p^{a - 1},那么

\tilde{\varphi}(x) = \prod_{i = 1}^{\infty}\left(1 + (1 - \frac{1}{p_i})\sum_{a=1}^{\infty} \frac{p_i^a}{p_i^{ax}}\right)=\prod_{i = 1}^{\infty}\frac{p_i^x - 1}{p_i^x - p_i} = \frac{\zeta(x - 1)}{\zeta(x)}

因为 \mu(p^0) = 1,\mu(p^1) = -1,\mu(p^a) = 0(a \ge 2),那么

\tilde{\mu}(x) = \prod_{i = 1}^{\infty}\left(1 - \frac{1}{p_i^x}\right)=\prod_{i = 1}^{\infty}\frac{p_i^x - 1}{p_i^x} = \frac{1}{\zeta(x)} \tilde{\mu^2}(x) = \prod_{i=1}^\infty\left(1 + \frac{1}{p^x}\right) = \prod_{i=1}^\infty\frac{p^x+1}{p^x} = \frac{\zeta(x)}{\zeta(2x)}

定义 n = \prod_{i=1}^mp_i^{k_i}\,,\,f(n) = \sum_{i=1}^m k_i\,,\,\lambda(n) = (-1)^{f(n)}

\tilde{\lambda}(x) = \prod_{i=1}^\infty\sum_{i=0}^\infty p_i^{-ax}(-1)^a = \prod_{i=1}^\infty\frac{p^x}{p^x + 1} = \frac{\zeta(2x)}{\zeta(x)}

狄利克雷卷积与 DGF 的关系

对于数论函数 f,g,h,满足 f * g = h \iff \tilde{f} \times \tilde{g} = \tilde{h}

证明:

f * g = h 时,有:

\begin{aligned} \tilde{h} &= \sum_{i = 1}^\infty\frac{h(i)}{i^x}\\ &= \sum_{i = 1}^\infty\sum_{d \mid n}\frac{f(d)}{d^x}\frac{g(\frac{i}{d})}{(\frac{i}{d})^x} \\ &= \sum_{d = 1}^\infty\sum_{j=1}^\infty\frac{f(d)}{d^x}\frac{g(j)}{j^x}\\ &=\tilde{f} \times \tilde{g} \end{aligned}

可以发现,上面证明的每一步都是等价变换,因此我们也完成了必要性的证明。

因此我们就能推出 \tilde{\sigma_{k}}(x) = \tilde{1} \times \tilde{\operatorname{id}_k} = \zeta(x)\zeta(x-k)

例题:Sum of (-1)^f(n)\,

Question

\sum_{i=1}^n\lambda(i)

定义 f(n) = \sum_{i=1}^m k_i,\lambda(n) = (-1)^{f(n)}

Solution

观察到 f 是完全和性函数,证明是显然的。

\lambda(a) \times \lambda(b)=(-1)^{f(a)+f(b)} = (-1)^{f(a \times b)} = \lambda(a \times b),那么 \lambda 是完全积性函数。题目要求 \lambda 的前缀和,我们考虑杜教筛。

我们考虑写出 \tilde{\lambda}

\tilde{\lambda} = \prod_{i=1}^\infty\sum_{i=0}^\infty p_i^{-ax}(-1)^a = \prod_{i=1}^\infty\frac{p^x}{p^x + 1} = \frac{\zeta(2x)}{\zeta(x)}

因为 \tilde{1} = \zeta(x),我们考虑将 \lambda1 做卷积。

h = \lambda * 1,则

h(p^k) = \sum_{d \mid p^k}(-1)^{f(d)} = \sum_{i=0}^k(-1)^i = [2 \mid k]

因为 h 为完全积性函数,所以 h(n) = [\,\exists \,d \in N^*,d^2=n]\sum_{i=1}^nh(i) = \lfloor \sqrt{n} \rfloor

那么 h1 的前缀和都可以 O(1) 求出,直接杜教筛 \lambda 即可,时间复杂度 O(n^{\frac{2}{3}})

声明

@henry_qwh 负责贝尔级数部分,@luuia 负责狄利克雷生成函数部分。