zoukankan      html  css  js  c++  java
  • 数论函数的前缀和

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

    引子

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

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

    分析:
    将 $f$ 的前缀和记作 $F$ 。有
    egin{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$,有
    egin{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 floor floor = 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} } $。

    证明
    若 $ 1le 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) imes f(n) = 0$,即 $f$ 恒为零,这种情形没有意义,因此要求 $f(1) = 1$ 。

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

    数论函数的狄利克雷卷积

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

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

    定理 2
    所有满足 $f(1) e 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) e 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$ 。
    egin{aligned}
    mu * dsone = sum_{d mid n} mu(d) &= sum_{k = 0}^{|P(n)|} inom{|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$ 。

    egin{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} o 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 $ 。
    egin{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 $ 。
    egin{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_{Bsubseteq A} (-1)^{|A-B|} f(B)$.

    证明
    We have
    egin{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 ext{ 无平方因子}}} g(D(x)) iff g(D(n)) = sum_{substack{x | n\ x ext{ 无平方因子}}} (-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)$ 。我们有

    egin{aligned}
    H(n) &= sum_{i=1}^{n} sum_{dmid i} f(d) g(i/d) \
    &= sum_{frac id = 1}^{n} sum_{d =1}^{lfloor n/(frac id) floor} f(d) g(i/d) \
    &= sum_{i = 1}^{n} sum_{d =1}^{lfloor n/i floor} f(d) g(i)
    end{aligned}


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

    若 $g(1) e 0$ ,则有

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

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

    注意到在求和式 $sum_{i = 2}^{n} g(i) F(lfloor n/i floor)$ 中,$lfloor n/i floor$ 的取值不超过 $2sqrt{n}$ 种,我们可以将 $2$ 到 $n$ 之间的整数按 $lfloor n/i floor$ 的取值分成若干段,满足 $lfloor n/i floor = 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 floor : 2 le k le n, k in mathbb Z }$ 。

    定理 2 $quad forall n in mathbb Z_{ge 2}$,记 $ r = lfloor sqrt{n} floor $,$A = {1, 2, 3, dots, r }$,$B = { lfloor n/2 floor, lfloor n/3 floor, dots, lfloor n/r floor}$,则 $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} e 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)| < 2sqrt{x}$ 。因此,总的枚举次数的上界为

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

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

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

    $$
    Thetaleft( m + sum_{k=1}^{floor{n / m}} sqrt{n/k} ight) = Theta left( m + int_{1}^{n/m} sqrt{n/x} dif x ight) = Thetaleft( m + n/sqrt{m} ight)
    $$

    取 $m = n^{2/3}$ 可得最优时间复杂度 $Theta left( n^{2/3} ight)$ 。此时空间复杂度也是 $Theta left( n^{2/3} ight)$ 。值得指出的是,
    若预处理至少前 $ 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

    杜教筛的时空复杂度分析

  • 相关阅读:
    MVP模式与MVVM模式
    webpack的配置处理
    leetcode 287 Find the Duplicate Number
    leetcode 152 Maximum Product Subarray
    leetcode 76 Minimum Window Substring
    感知器算法初探
    leetcode 179 Largest Number
    leetcode 33 Search in Rotated Sorted Array
    leetcode 334 Increasing Triplet Subsequence
    朴素贝叶斯分类器初探
  • 原文地址:https://www.cnblogs.com/Patt/p/9206314.html
Copyright © 2011-2022 走看看