最高科技——疯狂的前缀和
求N∑k=1fk
显然这玩意是可以O(N)的,看起来也不能再优化了。
但是在这个宇宙中确实还存在着更快的算法……
令gn=∑d|nfd,Fn=n∑k=1fk
因为N∑k=1gk=N∑k=1fk⌊Nk⌋=N∑k=1F⌊Nk⌋
整理得到FN=N∑k=1gk−N∑k=2F⌊Nk⌋
如果能够在 O(√N)的时间内求出∑Nk=1gk,那么可以在O(N34)的时间内计算出F(N)。
∑Nk=1gk对于某些特殊的gk能做的很快,例如N∑k=1∑d|kμ(d)=1N∑k=1∑d|kϕ(d)=N∑k=1k=N(N+1)2
如果gn能够很快的计算,那么可以对于n≤N23线性暴力计算Fn,否则递归计算,可以做到O(N23)。
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步