2022.12.11 鲜花
Divisor Summatory Function / DSF:
如何求一行 \(T(n)\)?考虑组合意义,对于每个 \(i\) 实际上计算了它不大于 \(n\) 的倍数个数,于是枚举这个倍数可以得到
另一种方式是考虑差分:
定义广义 DSF:
如何求一行 \(F(n)\)?仍然考虑差分:
这表明 \(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\) .
取模比较经典:
右边是广义 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 的数学题:
左边可以 \(\Theta(m\log^2 m)\) 求,也可以用神奇方法做到 \(\Theta(m\log m)\):
神奇方法
注意到 \(nx\) 是常数不用管,于是就是要求 \(\displaystyle \sum_{i=1}^nf(i)\) .
令 \(f\) 的系数序列为 \(\{a_m\}\),则就是要求
可以考虑先对于每个 \(i\) 计算 \(g(i)=\displaystyle\sum_{j=1}^nj^i\) 然后 \(\Theta(m)\) 统计 .
为了方便先让下标从 \(0\) 开始:\(g(i)=\displaystyle\sum_{j=0}^nj^i\) .
写出其 EGF:
这样就可以 \(\Theta(m\log m)\) 求了 .
右边就是广义 DSF,立得右边就是
多点求值后就是 Dirichlet 前缀和,多点求值复杂度太高了所以 Dirichlet 前缀和基本咋写都行 .
总时间复杂度 \(\Theta(n\log^2n+m\log^2m)\) .
有可能施 Bell 级数科技可以变成单 log(?
大概就这些了 .
以下是博客签名,正文无关
本文来自博客园,作者:yspm,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/16973068.html
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ