2022.12.11 鲜花

Divisor Summatory Function / DSF:

T(n)=i=1nni

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

T(n)=i=1nσ0(i)

另一种方式是考虑差分:

T(n)T(n1)=i=1nnii=1n1n1i=i=1n(ninii)=i=1n[in]=σ0(n)

定义广义 DSF:

F(n)=i=1nf(i)ni

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

F(n)F(n1)=i=1nf(i)nif(i)i=1n1n1i=i=1nf(i)(ninii)=i=1nf(i)[in]=dnf(d)

这表明 F=(f1)(x)δx .

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

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


一些示例:

Koishi 的数学题

给一个 n,令 f(x)=i=1nxmodi,求 f(1n) .

1n107 .

取模比较经典:

f(x)=i=1nxmodi=nxi=1nixi

右边是广义 DSF 形式,于是可以立即得到右边就是 i=1xσ1(i) ,

线性筛求 σ1 然后递推即可,时间复杂度 Θ(n) .

Koishi 的多项式

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

g(x)=i=1nf(i)(xmodi),求 f(1n),答案对 998244353 取模 .

1n,m5×104 .

类似 Koishi 的数学题:

g(x)=nxi=1nf(i)i=1nif(i)xi

左边可以 Θ(mlog2m) 求,也可以用神奇方法做到 Θ(mlogm)

神奇方法

注意到 nx 是常数不用管,于是就是要求 i=1nf(i) .

f 的系数序列为 {am},则就是要求

i=0maij=1nji

可以考虑先对于每个 i 计算 g(i)=j=1nji 然后 Θ(m) 统计 .

为了方便先让下标从 0 开始:g(i)=j=0nji .

写出其 EGF:

G(x)=z1g(z)xzz!=z1j=0njzxzz!=j=0nejx=1enx1ex

这样就可以 Θ(mlogm) 求了 .

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

h(x)=dxdf(d)

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

总时间复杂度 Θ(nlog2n+mlog2m) .

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

大概就这些了 .

posted @   yspm  阅读(76)  评论(3编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
😅​
点击右上角即可分享
微信分享提示