• 数论函数的前缀和


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

    引子

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

    函数 $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

    杜教筛的时空复杂度分析

  • 相关阅读:
    Verilog --序列检测器(采用移位寄存器实现)
    SV -- Randomization 随机化
    SV -- Interprocess Communication (IPC 线程间通信)
    SV -- Class 类
    Verilog -- 序列模三(整除3)检测器
    VSCode+C++环境搭建
    在次线性时间内计算线性递归数列
    Codefest19受虐记
    ABC135记录
    Paint.NET软件分享
  • 原文地址:https://www.cnblogs.com/Patt/p/9206314.html
Copyright © 2020-2023  润新知