数论函数的前缀和

本文是一篇长文,尚未完成。

引子

算法竞赛中常见一类计数问题:

函数 \(g : \mathbb Z\_{\ge 1} \to \mathbb Z\_{\ge 0}\) 已知。函数 \(f : \mathbb Z_{\ge 1} \to \mathbb Z_{\ge 0}\), $f(n) := \sum_{d | n} g(d) $ 。求 \(f\) 的前缀和。

分析:
\(f\) 的前缀和记作 \(F\) 。有
\begin{aligned}
F(n) &:= \sum_{i = 1}^{n} f(i) = \sum_{i=1}^{n} \sum_{d | i} g(d) = \sum_{d = 1} ^ {n} \floor{ n / d} g(d)
\end{aligned}

\(g\) 的前缀和为 \(G\),有
\begin{aligned}
F(n) = \sum_{d = 1} ^ {n} \floor{ n / d} g(d) = \sum_{i = 1}^n G(\floor{n / i})
\end{aligned}

证明:和式 $\sum_{i = 1}^n G(\floor{n / i}) $ 中,\(g(k)\) 被累加的次数恰为 $\floor{ n / i} $ 取值大于等于 \(k\) 的次数。$\floor{ n / i } \ge k \iff n / i \ge k \iff i \le n / k $,因此 $ g(k) $ 恰被累加了 $ \floor{ n / k} $ 次。

引理 1
\(\forall n, m \in \mathbb Z_{\ge 1}\),若 \(m \le \sqrt{n}\),则 \(\lfloor n / \lfloor n/m \rfloor \rfloor = m\)

证明
\(k = \floor{n/m}\),则 \(mk \le n < m(k + 1)\),那么 \(m \le n / k < m(k + 1) / k\) 。若要 $ \floor{n / k} = m$ 成立,即要 $ m \le n/ k < m + 1$ 成立,而 \(m + 1 \ge m (k + 1) / k\)\(m \le n/ k < m + 1\) 成立的充分条件;\(m + 1 \ge m (k + 1) / k\) 即 $ k \ge m$,即 $ \floor{ n / m} \ge m$,这等价于 $ m^2 \le n$,即 \(m \le \sqrt{n}\)

推论
对于 \(1 \le i \le \floor{\sqrt{n}}\),$ i \mapsto \floor{n/i} $ 是单射。

定理 1
$2 \floor{\sqrt{n}} - 1 \le | \{ \floor{n / i} : 1 \le i \le n \} | \le 2 \floor{ \sqrt{n} } $。

证明
若 $ 1\le x < y \le \floor{\sqrt{n}} $,则 $ n / x - n / y \ge n /(y-1) - n / y = n / (y(y-1)) > 1$ ,故有 \(\floor{ n / x} > \floor{n / y}\) 。所以,当 $ i \le \floor{\sqrt{n}}$ 时,\(n / i\) 恰产生 $ \floor{\sqrt{n}} $ 个不同的值,并且这些值都不小于 $ \floor{\sqrt{n}} $ 。若 $ i > \floor{\sqrt{n}} $ 则 $ 1 \le \floor{ n / i } \le \floor{n / (\floor{\sqrt{n}} + 1)} $ 。容易验证 $ \floor{\sqrt{n}} - 1 <n / (\floor{\sqrt{n}} + 1) < \floor{\sqrt{n}} + 1$,故有 \(\color{blue}{\floor{\sqrt{n}} - 1 \le \floor{n / (\floor{\sqrt{n}} + 1)} \le \floor{\sqrt{n}} }\) 。又从引理 \(1\) 可以推知,在 \(i\) 从 $ \floor{\sqrt{n}} + 1 $ 变化到 \(n\) 的过程中,$ \floor{ n / i } $ 能取到 \(1\) 到 $\floor{n / (\floor{\sqrt{n}} + 1)} $ 之间的每一个整数。因此 $ 2 \floor{\sqrt{n}} - 1 \le | \{ \floor{n / i} : 1 \le i \le n \} | \le 2 \floor{ \sqrt{n} } $ 。

\(f\) 是定义在 \((0, \infty)\) 上的严格单调递减的函数。对于任意 $ t \in \mathbb Z_{\ge 1}$,使等式 $ \floor{f(x)} = \floor{f(t)} $ 成立的最大整数 $x = \floor{ f^{-1}(\floor{f(t)}) } $ 。

\(f\) 是定义在 \((0, \infty)\) 上的严格单调递增的函数。对于任意 $ t \in \mathbb Z_{\ge 1}$,使等式 $ \floor{f(x)} = \floor{f(t)} $ 成立的最小整数 $x = \ceil{ f^{-1}(\floor{f(t)}) } $ 。

一些概念

数论函数

数论函数是指定义域为正整数集,陪域为复数域的函数。
Read more here.

积性函数

积性函数是一类特殊的数论函数。设 \(f\) 是数论函数。若 \(f(1) = 1\) 且对于任意两个互质的正整数 \(a,b\),都有 \(f(ab) = f(a)f(b)\),则 \(f\)积性函数

为何要求 \(f(1) = 1\)?根据定义,积性函数 \(f\) 必满足 \(f(1)^2 = f(1)\),即 \(f(1) = 0\)\(f(1)=1\) 。若 \(f(1) = 0\)\(f(n) = f(1) \times f(n) = 0\),即 \(f\) 恒为零,这种情形没有意义,因此要求 \(f(1) = 1\)

\(f\) 是积性函数,若对任意正整数 \(a, b\) 都有 \(f(ab) = f(a) f(b)\),则称 \(f\)完全积性函数

数论函数的狄利克雷卷积

\(f\)\(g\) 是数论函数。数论函数 $ \sum_{d\mid n} f(d) g(n/d) $ 称为 \(f\)\(g\) 的狄利克雷卷积,记作 \(f * g\)

容易证明狄利克雷卷积满足交换律与结合律。

定理 2
所有满足 \(f(1) \ne 0\) 的数论函数关于狄利克雷卷积构成交换群。

证明
取单位元为 \(e(n) = [n = 1]\) 。容易验证任意数论函数 \(f\) 都满足 $f * e = e * f = f $ 。

下面来考虑 \(f\) 在狄利克雷卷积意义下的逆元 \(f^{-1}\) 。实际上,根据 \(f * f^{-1} = e\) 可以递推出 \(f^{-1}\)

$ e(1) = f(1) f^{-1}(1) = 1 \iff f^{-1}(1) = 1/ f(1) $

对于 \(n \ge 2\)

\[e(n) = \sum_{d | n} f(d) f^{-1}( n / d) = 0 \iff f^{-1}(n) = - \frac{ \sum_{\substack{ d|n \\\\ d \ge 2}} f(d) f^{-1}(n/d) } {f(1)} \]

据此立得逆元的存在性和唯一性。

以下假设所讨论的数论函数都满足 \(f(1) \ne 0\) 。若未特别说明,以下所谓逆元皆指狄利克雷卷积意义下的逆元。

莫比乌斯函数

将取值恒为 \(1\) 的函数记作 \(\dsone\)\(\dsone\) 的逆元称作莫比乌斯函数,记作 \(\mu\)。根据定义有,\(\mu * \dsone = e\)

莫比乌斯函数的另一种等价定义是

\(\mu(1) = 1\) 。对于 \(n \ge 2\),若 \(n\)\(k\) 个不同质数的乘积,则 \(\mu(n) = (-1)^k\),否则 \(\mu(n) = 0\)

下面我们证明这两种定义等价。我们只要证明,按第二种定义仍有 $ \mu * \dsone = e$ 。

证明
\(P(n)\) 表示正整数 \(n\) 的素因子集合。特别地,\(P(1) = \emptyset\)
\begin{aligned}
\mu * \dsone = \sum_{d \mid n} \mu(d) &= \sum_{k = 0}^{|P(n)|} \binom{|P(n)|}{k} (-1)^k \\
&= [|P(n)| = 1] \\
&= [n = 1] \\
&= e
\end{aligned}

引子中提到的函数 \(f(n) := \sum_{d | n} g(d)\) 可写成 $ f = \dsone * g $,易见这蕴含着 $ g = \mu * f $。

$ f = \dsone * g \iff g = \mu * f$ 这个结论通常称作莫比乌斯反演。其实这只是一般意义下的莫比乌斯反演的一个特例。

从这一小节的讨论中,我们可以看出,莫比乌斯函数的定义域其实不必是全体正整数。取全体质数的一个子集 \(S\)\(S\) 可以是空集),定义由 \(S\) 所导出的正整数子集 \(N(S)\) 为 $ N(S) := \{ n \in \mathbb{Z}_{\ge 1} : P(n) \sse S \} $ 。若把莫比乌斯函数定义在 \(N(S)\) 上,上述诸结论仍然成立。更进一步,我们可以把数论函数的定义域取为 \(N(S)\),诸结论一样成立。这也就是说,以 \(N(S)\) 作为 \(\mathbb Z\_{\ge 1}\) 的推广是合适的。例如,可以把数论函数定义在全体奇数上。

莫比乌斯函数的应用

莫比乌斯函数的性质 \(\mu * \dsone = e\) 可以简化计算。下面举一例。

\(\sum_{x = 1}^{n} \sum_{y = 1}^{m} [\gcd(x, y) = 1]\) 。其中,$ n \le m$ 。

\begin{aligned}
\sum_{ x = 1} ^{n} \sum_{y = 1} ^{m} [\gcd(x, y) = 1] &= \sum_{ x = 1} ^{n} \sum_{y = 1} ^{m} e(\gcd(x, y)) \\
&= \sum_{ x = 1} ^{n} \sum_{y = 1} ^{m} (\mu * \dsone) (\gcd(x, y)) \\
&= \sum_{x = 1} ^ {n} \sum_{y = 1} ^{m} \sum_{ d \mid \gcd(x, y) } \mu(d) \\
&= \sum_{d = 1}^{n} \mu(d) \sum_{x = 1} ^ {n} \sum_{y = 1} ^{m} [d \mid \gcd(x, y)] \\
&= \sum_{d = 1}^{n} \mu(d) \sum_{x = 1} ^ {n} [d \mid x] \sum_{y = 1} ^{m} [d \mid y] \\
&= \sum_{d = 1}^{n} \mu(d) \floor{ n / d } \floor{m / d}
\end{aligned}

下面讨论莫比乌斯反演的一个推广。回顾前面提到的莫比乌斯反演,设 \(f, g\) 是两数论函数,有 $ f = \dsone * g \iff g = \mu * f $ 。此性质可稍加推广。设 \(f, g\) 是两数论函数,函数 \(t: \mathbb Z_{\ge 1} \to \mathbb Z_{\ge 1}\) 是完全积性函数。我们有

\[f(n) = \sum_{t(d) \mid n} g(n / t(d)) \iff g(n) = \sum_{t(d) \mid n} \mu(d) f(n / t(d)) \]

证明
先证 $ \implies $ 。
\begin{aligned}
& \sum_{t(d) \mid n} \mu(d) f(n / t(d)) \\
&= \sum_{t(d) \mid n} \mu(d) \sum_{t(x) \mid n/t(d) } g(n / (t(d) t(x))) \\
&= \sum_{t(d) \mid n} \mu(d) \sum_{t(dx) \mid n } g(n / t(dx)) \\
&= \sum_{t(k) \mid n} g(n/ t(k)) \sum_{d \mid k} \mu(d) \\
&= g(n)
\end{aligned}
再证 $ \impliedby $ 。
\begin{aligned}
& \sum_{t(d) \mid n} g(n / t(d)) \\
&= \sum_{t(d) \mid n} \sum_{ t(x) \mid n/t(d) } \mu(x) f(n / (t(d) t(x))) \\
&= \sum_{t(d) \mid n} \sum_{ t(dx) \mid n } \mu(x) f(n / t(dx)) \\
&= \sum_{t(k) \mid n} f(n / t(k)) \sum_{ x \mid k } \mu(x) \\
&= f(n)
\end{aligned}

容斥原理

定理 3
Let \(f\) and \(g\) be two functions defined on the subsets of a finite set \(S\) such that \(f(A) = \sum_{B \subseteq A} g(B)\). Then \(g(A) = \sum_{B\subseteq A} (-1)^{|A-B|} f(B)\).

证明
We have
\begin{align*}
\sum_{B \subseteq A} (-1)^{|A-B|} f(B) &= \sum_{\substack{B \subseteq A \\ C \subseteq B}} (-1)^{|A-B|} g(C) \\
&= \sum_{C \sse A} g(C) \sum_{C \sse B \sse A} (-1)^{ |A-B| } = g(A). \qed
\end{align*}

A dual form of inclusion-exclusion may be proved the same way as above:

\[f(A) = \sum_{ S \spe B \spe A} g(B) \iff g(A) = \sum_{S \spe B \spe A} (-1)^{|B-A|} f(B). \]

注:定理 3 及其证明引自 Handbook of Combinatorics vol 2 p.p. 1049。这本书的讲法比 Enumerative Combinatorics vol 1 second edition, 第 2.1 节的讲法更简洁。

[Note: 这一小节内容有错误,需要更改。

从容斥原理的角度理解莫比乌斯反演

\(D(n)\) 表示 \(n\) 的素因子的集合。
根据容斥原理我们有

\[ f(D(n)) = \sum_{\substack{x | n\\\\ x \text{ 无平方因子}}} g(D(x)) \iff g(D(n)) = \sum_{\substack{x | n\\\\ x \text{ 无平方因子}}} (-1)^{|D(n) - D(x)|} f(D(x)) \]

亦即

\[f(D(n)) = \sum_{x | n} g(D(x)) \iff g(D(n)) = \sum_{x | n} \mu(n/x) f(D(x)) \]

于是我们可以把莫比乌斯函数看做是为了应用容斥原理而有意“设计”出来的一个函数。从这个角度看,莫比乌斯反演不过是“穿了马甲”的容斥原理。

\(f\)\(g\) 为两数论函数,我们有

\[f(n) = \sum_{ d | n} g(d) \iff g(n) = \sum_{d | n} \mu(n/d) f(d) \]

及其对偶形式

\[f(n) = \sum_{i = 1}^{m} g(in) \iff g(n) = \sum_{i=1}^{m} \mu(i) f(in) \]

其中 \(m\) 是常数。- end note]

数论函数的前缀和

杜教筛

\(f\) 是数论函数,令 \(F(n) = \sum_{i=1}^{n} f(i)\),即 \(F\)\(f\) 的前缀和 。又设 \(g\) 为数论函数,令 \(h\)\(f\)\(g\) 的狄利克雷卷积,\(H(n) := \sum_{i=1}^{n} h(n)\) 。我们有

\begin{aligned}
H(n) &= \sum_{i=1}^{n} \sum_{d\mid i} f(d) g(i/d) \\
&= \sum_{\frac id = 1}^{n} \sum_{d =1}^{\lfloor n/(\frac id)\rfloor} f(d) g(i/d) \\
&= \sum_{i = 1}^{n} \sum_{d =1}^{\lfloor n/i \rfloor} f(d) g(i)
\end{aligned}


\begin{equation}
H(n) = \sum_{i = 1}^{n} g(i) F(\floor{ n/i }) \label{E:1}
\end{equation}
从而
\begin{equation}
g(1)F(n) = H(n) - \sum_{i =2}^{n} g(i) F(\floor{n/i}) \label{E:2}
\end{equation}

\(g(1) \ne 0\) ,则有

\begin{equation}
F(n) = \frac{1}{g(1)} \left( H(n) - \sum_{i = 2}^{n} g(i) F(\floor{n/i}) \right) \label{E:3}
\end{equation}

\eqref{E:3} 可以看做 \(F(n)\) 的递推式。

注意到在求和式 \(\sum_{i = 2}^{n} g(i) F(\lfloor n/i \rfloor)\) 中,\(\lfloor n/i \rfloor\) 的取值不超过 \(2\sqrt{n}\) 种,我们可以将 \(2\)\(n\) 之间的整数按 \(\lfloor n/i \rfloor\) 的取值分成若干段,满足 \(\lfloor n/i \rfloor = k\)\(i\) 的范围是 \((n/(k+1), n/k]\)

对于数论函数 \(f\),如果能找到数论函数 \(g\) 满足 \(g\)\(f*g\) 的前缀和都比较容易求出,那么(用哈希表记忆化)递归地计算 \(F(n)\) 的复杂度就可能比较低。当然这只是初步观察之后所做的猜想,复杂度究竟如何尚需仔细分析才能知道。

上述算法在国内 OI 界一般称作杜教筛

杜教筛的复杂度分析

以下论证取自 riteme,略作调整。

假设 \(h\)\(g\) 的前缀和可以 \(O(1)\) 求出。以 \(Q(n)\) 表示 \(n\) 除以 \(2\)\(n\) 之间的整数所得诸商的集合,即 \(Q(n) := \\{\lfloor n/k \rfloor : 2 \le k \le n, k \in \mathbb Z \\}\)

定理 2 \(\quad \forall n \in \mathbb Z_{\ge 2}\),记 $ r = \lfloor \sqrt{n} \rfloor \(,\)A = \{1, 2, 3, \dots, r \}\(,\)B = \{ \lfloor n/2 \rfloor, \lfloor n/3 \rfloor, \dots, \lfloor n/r \rfloor\}$,则 \(Q(n) = A \cup B\) 并且 $ |Q(n)| = 2 \sqrt{n} + \Theta(1)$ 。

证明 \(\quad\) 首先证明,当 \(n \ge 2\) 时,\(\forall x \in A\)\(\floor{ n / x } \ge 2\) 。容易验证当 \(n = 2\)\(n = 3\) 成立;当 \(n \ge 4\) 时,\(\forall x \in A\), 有 \(\floor{n /x} \ge \floor{\sqrt{n}} \ge 2\) ;又根据引理 1,$ \forall x \in A \(,\)\floor{ n / \floor{n / x}} = x$,所以 $ x \in Q(n)$。另一方面,若 \(\floor{n / k} > r\) 即 $ n / k \ge r + 1$,那么 $ k \le n / (r + 1) \le r$。因此 \(Q(n) \setminus A \subseteq B\)。根据 \(B\) 的定义,\(B \subseteq Q(n)\),由此可得 \(Q(n) = A \cup B\)

对于 \(1 \le x < y \le r\)\(n / x - n / y \ge n /(y - 1) - n / y = n /(y(y-1)) > 1\),所以 \(\floor{n/x} \ne \floor{n/y}\),即 \(|B| = r - 1\) 。又 \(\floor{n/s} \ge s\),故 \(2r - 2 \le |Q(n)| \le 2r - 1\),所以 \(|Q(n)| = 2 \sqrt{n} + \Theta(1)\)

引理 2 \(\quad\) 取常数 \(a, b \in \mathbb Z_{\ge 1}\) 。对于任意正整数 \(x\),有 \(\floor{\floor{x/a}/b} = \floor{x /(ab)}\)

证明 \(\quad\)\(x = kab + y\) 且 $ 0 \le y < ab$,即 \(\floor{x / (ab) } = k\),那么 \(\floor{x / a} = kb + \floor{y / a}\),从而 $ \floor{\floor{ x / a} / b} = k + \floor{\floor{y / a} / b} \le k + \floor{(y / a) / b)} = k$,所以 \(\floor{\floor{x/a}/b} = k\)

定理 3 \(\quad\) 对于任意正整数 \(n\),任意 \(m \in Q(n)\),有 \(Q(m) \subseteq Q(n)\)

证明 \(\quad\) 因为 \(m \in Q(n)\),故可设 \(m = \floor{n/a}\)。对于 \(z \in Q(m)\),有 $ z = \floor{m /b}\(,根据引理 2,\)z = \floor{ n/ (ab)}$ 。因为 \(a, b > 1\),且 \(a \le n\)\(b \le n / a\),所以 \(1 < ab \le n\),所以 $ z \in Q(n)$ 。

定理 3 揭示了递归式 \eqref{E:3} 的巧妙之所在:在递归计算 \(F(n)\) 的整个过程中,需要计算的 \(F(\cdot)\) 只有 \(|Q(n)| + 1\) 种(即 \(Q(n) \cup \\{n\\}\))。计算 \(F(x)\) 的时间开销是枚举 \(Q(x)\) 中的元素 \(k\),查哈希表看 \(F(k)\) 是否已经算好,没算好就递归调用 \(F(k)\);枚举次数是 \(|Q(x)| < 2\sqrt{x}\) 。因此,总的枚举次数的上界为

\begin{aligned}
&2\left(\sqrt{n} + \sum_{k = 1}^{\floor{\sqrt{n}}} \sqrt{k} + \sum_{k = 2}^{\floor{\sqrt{n}}}\left(\sqrt{n/k}\right)\right) \\
&= 2\left( \sum_{k = 1}^{\floor{\sqrt{n}}} \sqrt{k} + \sum_{k = 1}^{\floor{\sqrt{n}}}\left(\sqrt{n/k}\right)\right) \\
&= \Theta\left( \int_1 ^{\sqrt{n}} \left(\sqrt{x} + \sqrt{n/x} \right) \dif x \right) \\
&= \Theta\left( n^{3/4} \right)
\end{aligned}

根据上面的分析,易见空间复杂度是 \(\Theta(\sqrt{n})\)

假设我们可以在线性时间内预处理出 \(F(\cdot)\) 的前若干项,算法的时间复杂度还可以更优。为了便于分析,假设在线性时间内预处理出了前 \(m\) 项,且 \(m \ge \floor{\sqrt{n}}\),则时间复杂度变为

\[\Theta\left( m + \sum_{k=1}^{\floor{n / m}} \sqrt{n/k} \right) = \Theta \left( m + \int_{1}^{n/m} \sqrt{n/x} \dif x \right) = \Theta\left( m + n/\sqrt{m} \right) \]

\(m = n^{2/3}\) 可得最优时间复杂度 \(\Theta \left( n^{2/3} \right)\) 。此时空间复杂度也是 \(\Theta \left( n^{2/3} \right)\) 。值得指出的是,
若预处理至少前 $ \floor{\sqrt{n}} $ 项,对于未预处理的项 $ f(x) $,必有 $ x > \floor{\sqrt{n}} $,根据定理 1,此时 \(x\)\(\floor{ n / x}\) 一一对应,因此我们可以用数组代替哈希表来存储 $f(x) $,把 \(f(x)\) 存到数组中下标为 \(\floor{ n / x}\) 的位置即可。

关于杜教筛的复杂度,其实任之洲在他的集训队论文《积性函数求和的几种方法》中也给出了类似于 riteme 的论证,不过没有这么细致,只是一笔带过

根据引理 4.2 和引理 5.1,在递推计算 \(S(n)\) 的整个过程中,需要被计算的 \(S(\floor{n /i })\) 只有 \(O(\sqrt{n})\) 种。

任之洲论文里的引理 4.2 类似于上面的引理 1,引理 5.1 类似于上面的引理 2。

总结

不难看出,杜教筛其实并不要求 \(f\) 是积性函数,关键是找到适当的函数 \(g\) 来跟 \(f\) 搭配。不过值得指出的是,对于上面提到的那个预处理优化,若 \(f\) 是积性函数且 \(f(p^k)\) 可以 \(O(1)\) 求出,则可以用线性筛在线性时间内求出 \(f\) 的若干项;一般的数论函数 \(f\) 未必具有这样的好性质。任之洲在其集训队论文中是如此评论杜教筛的

…… 一种高效的数论函数求和方法,这个算法在国内信息学竞赛中一般被称为杜教筛,一种利用 Dirichlet 卷积进行构造的算法,虽然和积性没有很大联系,且需要被计算函数本身拥有特殊的性质,使用条件略为苛刻,但可以给我们很多启发。

积性函数的前缀和

todo

References

杜教筛的时空复杂度分析

posted @ 2019-03-15 20:57  Pat  阅读(779)  评论(0编辑  收藏  举报