博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最高科技——疯狂的前缀和
阅读量:7121 次
发布时间:2019-06-28

本文共 678 字,大约阅读时间需要 2 分钟。

求\[\sum_{k=1}^N f_k\]

显然这玩意是可以\(O(N)\)的,看起来也不能再优化了。

但是在这个宇宙中确实还存在着更快的算法……

令\[g_n=\sum_{d|n}f_d , F_n=\sum_{k=1}^{n}f_k\]

因为\[\sum_{k=1}^N g_k = \sum_{k=1}^N {f_k \lfloor \frac Nk \rfloor} = \sum_{k=1}^N F_{\lfloor \frac Nk \rfloor}\]

整理得到\[F_N=\sum_{k=1}^N g_k - \sum_{k=2}^N F_{\lfloor \frac Nk \rfloor}\]

如果能够在 \(O(\sqrt{N})\)的时间内求出\(\sum_{k=1}^N g_k\),那么可以在\(O(N^\frac 34)\)的时间内计算出\(F(N)\)。

\(\sum_{k=1}^N g_k\)对于某些特殊的\(g_k\)能做的很快,例如\[\sum_{k=1}^N\sum_{d|k}\mu(d)=1\]\[\sum_{k=1}^N \sum_{d|k}\phi(d)=\sum_{k=1}^N k=\frac{N(N+1)}{2}\]

如果\(g_n\)能够很快的计算,那么可以对于\(n \leq N^\frac 23\)线性暴力计算\(F_n\),否则递归计算,可以做到\(O(N^\frac 23)\)。

转载于:https://www.cnblogs.com/zhuohan123/p/3847466.html

你可能感兴趣的文章
iOS label中间加横线的实现
查看>>
golang调用ping命令出现too many open files
查看>>
【批处理】批处理中的一些特殊技巧汇总(2015-6-26)
查看>>
js从前端访问到springMVC后台处理返回页面的过程
查看>>
课程第七天内容《基础交换七》
查看>>
python用profile、hotshot、timeit协助程序性能优化
查看>>
Redis集群方案(codis)
查看>>
Spring整合MyBatis的几种方式
查看>>
Linux服务器开发常用的命令以及遇到的问题
查看>>
Welcome to WANGFRAME
查看>>
单点登录
查看>>
UIView类的UIViewAnimationWithBlocks扩展 和 使用core an...
查看>>
如何使用UIAutomation进行iOS 自动化测试
查看>>
centos
查看>>
Ubuntu单系统(一):苦难深重的校园网
查看>>
MyBatis 学习笔记一基本对象
查看>>
jenkins pipeline slack
查看>>
CoverFlow效果控件无限循环效果
查看>>
Android Activity生命周期应用 网络设置
查看>>
jenkins + svn + mvn + tomcat搭建CI服务
查看>>