2022.12.11 鲜花

Divisor Summatory Function / DSF:

\[T(n)=\sum_{i=1}^n\left\lfloor\dfrac ni\right\rfloor \]

如何求一行 \(T(n)\)?考虑组合意义,对于每个 \(i\) 实际上计算了它不大于 \(n\) 的倍数个数,于是枚举这个倍数可以得到

\[T(n)=\sum_{i=1}^n\sigma_0(i) \]

另一种方式是考虑差分:

\[\begin{aligned}T(n)-T(n-1)&=\sum_{i=1}^n\left\lfloor\dfrac ni\right\rfloor-\sum_{i=1}^{n-1}\left\lfloor\dfrac{n-1}i\right\rfloor\\&=\sum_{i=1}^n\left(\left\lfloor\dfrac ni\right\rfloor-\left\lfloor\dfrac{n-i}i\right\rfloor\right)\\&=\sum_{i=1}^n[i\mid n]\\&=\sigma_0(n)\end{aligned} \]

定义广义 DSF:

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

如何求一行 \(F(n)\)?仍然考虑差分:

\[\begin{aligned}F(n)-F(n-1)&=\sum_{i=1}^nf(i)\left\lfloor\dfrac ni\right\rfloor-f(i)\sum_{i=1}^{n-1}\left\lfloor\dfrac{n-1}i\right\rfloor\\&=\sum_{i=1}^nf(i)\left(\left\lfloor\dfrac ni\right\rfloor-\left\lfloor\dfrac {n-i}i\right\rfloor\right)\\&=\sum_{i=1}^nf(i)[i\mid n]\\&=\sum_{d\mid n}f(d)\end{aligned} \]

这表明 \(F=\sum(f*1)(x)\delta x\) .

因为假设是要求一行所以就认为前缀和是 \(\Theta(n)\) 的,那么 Dirichlet 前缀和可以 \(\Theta(n\log\log n)\),于是广义 DSF 求一行就可以 \(\Theta(n\log\log n)\) 解决,前提是 \(f\) 可以在不高于 \(\Theta(n\log\log n)\) 复杂度求一行 .

其实非常显然,组合意义做这个也是一样的 .


一些示例:

Koishi 的数学题

给一个 \(n\),令 \(\displaystyle f(x)=\sum_{i=1}^nx\bmod i\),求 \(f(1\dots n)\) .

\(1\le n\le 10^7\) .

取模比较经典:

\[f(x)=\sum_{i=1}^nx\bmod i=nx-\sum_{i=1}^ni\left\lfloor\dfrac xi\right\rfloor \]

右边是广义 DSF 形式,于是可以立即得到右边就是 \(\displaystyle\sum_{i=1}^x\sigma_1(i)\) ,

线性筛求 \(\sigma_1\) 然后递推即可,时间复杂度 \(\Theta(n)\) .

Koishi 的多项式

给两个正整数 \(n,m\) 和一个 \(m\) 次多项式 \(f(x)\) .

\(\displaystyle g(x)=\sum_{i=1}^nf(i)(x\bmod i)\),求 \(f(1\dots n)\),答案对 \(998244353\) 取模 .

\(1\le n,m\le 5\times 10^4\) .

类似 Koishi 的数学题:

\[g(x)=nx\sum_{i=1}^nf(i)-\sum_{i=1}^nif(i)\left\lfloor\dfrac xi\right\rfloor \]

左边可以 \(\Theta(m\log^2 m)\) 求,也可以用神奇方法做到 \(\Theta(m\log m)\)

神奇方法

注意到 \(nx\) 是常数不用管,于是就是要求 \(\displaystyle \sum_{i=1}^nf(i)\) .

\(f\) 的系数序列为 \(\{a_m\}\),则就是要求

\[\sum_{i=0}^ma_i\sum_{j=1}^nj^i \]

可以考虑先对于每个 \(i\) 计算 \(g(i)=\displaystyle\sum_{j=1}^nj^i\) 然后 \(\Theta(m)\) 统计 .

为了方便先让下标从 \(0\) 开始:\(g(i)=\displaystyle\sum_{j=0}^nj^i\) .

写出其 EGF:

\[\begin{aligned}G(x)&=\sum_{z\ge1}\dfrac{g(z)x^z}{z!}\\&=\sum_{z\ge1}\sum_{j=0}^nj^z\dfrac{x^z}{z!}\\&=\sum_{j=0}^n\mathrm e^{jx}\\&=\dfrac{1-\mathrm e^{nx}}{1-\mathrm e^x}\end{aligned} \]

这样就可以 \(\Theta(m\log m)\) 求了 .

右边就是广义 DSF,立得右边就是

\[h(x)=\sum_{d\mid x}d\cdot f(d) \]

多点求值后就是 Dirichlet 前缀和,多点求值复杂度太高了所以 Dirichlet 前缀和基本咋写都行 .

总时间复杂度 \(\Theta(n\log^2n+m\log^2m)\) .

有可能施 Bell 级数科技可以变成单 log(?

大概就这些了 .

posted @ 2022-12-11 11:39  yspm  阅读(74)  评论(3编辑  收藏  举报
😅​