本文内容概要:

  • \(A=\sum\limits_{i=1}^n\dfrac1{\sqrt i}=1+\dfrac1{\sqrt2}+\cdots+\dfrac1{\sqrt n}\)

    \(O(\sqrt n)\) ,将给出一种只需使用初中数学知识的放缩

  • \(B=\sum\limits_{i=1}^n\sqrt i=1+\sqrt2+\cdots+\sqrt n\)

    \(O(n\sqrt n)\) ,使用积分进行放缩

  • \(C=\sum\limits_{i=1}^n\dfrac1i=1+\dfrac12+\cdots+\dfrac1n\)

    著名的调和级数,\(O(\ln n)\) ,主要介绍一种证明下界的方法

  • 杜教筛时间复杂度证明

    不再讲解算法,阅读前请确保你已经事先了解杜教筛

一些证明来自于我的数学老师,在此表示感谢


\(A=\sum\limits_{i=1}^n\dfrac1{\sqrt i}\)

考虑放缩: \(\dfrac1{\sqrt i+\sqrt{i+1}}<\dfrac1{2\sqrt i}<\dfrac1{\sqrt{i-1}+\sqrt i}\)

两边裂个项:\(\sqrt{i+1}-\sqrt i<\dfrac1{2\sqrt i}<\sqrt i-\sqrt{i-1}\)

求和:\(\sum\limits_{i=1}^n\sqrt{i+1}-\sqrt i<\sum\limits_{i=1}^n\dfrac1{2\sqrt i}<\sum\limits_{i=1}^n\sqrt i-\sqrt{i-1}\)

即 \(\sqrt{n+1}-1<\dfrac12A<\sqrt n\)

故 \(2\sqrt{n+1}-2<A<2\sqrt n\)


\(B=\sum\limits_{i=1}^n\sqrt i\)

注意到

\[\int_0^n\sqrt x\cdot dx<\sum_{x=1}^n\sqrt x<\int_0^n\sqrt{x+1}\cdot dx
\]

放个图,应该能帮助理解

直接积出来,得到 \(\dfrac23n^{1.5}<B<\dfrac23\left[(n+1)^{1.5}-1\right]\)

这种处理技巧对应的专有名词是积分判别法


\(C=\sum\limits_{i=1}^n\dfrac1i\)

类似地,用积分容易证明 \(\ln(1+n)<C<1+\ln n\) ,这里不再赘述,读者可自行完成

(严格地说,\(n=1\) 时是能取到上界的,但问题不大)

下面给出另一种 \(C>\ln(n+1)\) 的证明方法

考虑一个结论: \(x-1\ge\ln x\) (当且仅当 \(x=1\) 时取等)

似乎是高中数学常见结论?不证了

令 \(x=2,\dfrac32,\dfrac43,\cdots,\dfrac{n+1}n\) ,代入并求和:

\[\sum_{i=1}^n\left(\dfrac{i+1}i-1\right)>\sum_{i=1}^n\ln\dfrac{i+1}i
\]
\[\sum_{i=1}^n\dfrac1i>\ln\left(\prod_{i=1}^n\dfrac{i+1}i\right)
\]
\[C>\ln(n+1)
\]

证毕

如需了解更多 请自行百度调和级数


杜教筛时间复杂度证明

不妨考虑最简单的情形: \(S(n)=\sum\limits_{i=2}^nS\left(\left\lfloor\dfrac ni\right\rfloor\right)\) ,使用整除分块递归求解

注意,时间复杂度写成 \(T(n)=O(\sqrt n)+\sum\limits_{i=2}^{\sqrt n}(T(i)+T(\frac ni))\) 的证明都是错的。

\(T(200000)\) 已经超过 1e8 了。自行体会。

证明应当考虑到杜教筛是有记忆化的

于是整个算法中,每个 \(S(n/i)(i\in\mathbb N)\) 都恰被计算了一次

于是时间复杂度为 \(O(~\sum\limits_{j=n/i}\!\sqrt j~)\)

\(j\le \sqrt n\) 的部分显然可以忽略,考虑剩下的

\[\sum_{i=1}^{\sqrt n}\sqrt{\dfrac ni}=\sqrt n\sum_{i=1}^{\sqrt n}\dfrac1{\sqrt i}\approx \sqrt n\cdot2\sqrt{\sqrt n}=2n^{3/4}
\]

于是时间复杂度就是 \(O(n^{3/4})\)

我们还可以优化,用线性筛预处理 \(S(1)\sim S(k) (k\ge \sqrt n)\)

这样就可以忽略 \(j\le k\) 的部分

\[\sum_{i=1}^{n/k}\sqrt{\dfrac ni}\approx \dfrac{2n}{\sqrt k}
\]

时间复杂度就是 \(O\left(k+\dfrac n{\sqrt k}\right)\) ,当 \(k\) 为 \(O(n^{2/3})\) 级别时取到最优 \(O(n^{2/3})\) 。

一些求和式的估算 & 杜教筛时间复杂度证明的更多相关文章

  1. 牛客练习赛84F-牛客推荐系统开发之下班【莫比乌斯反演,杜教筛】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/11174/F 题目大意 给出\(n,k\)求 \[\sum_{i_1=1}^n\sum_{i_2=1}^n.. ...

  2. hdu6607 min25筛+杜教筛+伯努利数求k次方前缀和

    推导过程类似https://www.cnblogs.com/acjiumeng/p/9742073.html 前面部分min25筛,后面部分杜教筛,预处理min25筛需要伯努利数 //#pragma ...

  3. ●杜教筛入门(BZOJ 3944 Sum)

    入门杜教筛啦. http://blog.csdn.net/skywalkert/article/details/50500009(好文!) 可以在$O(N^{\frac{2}{3}})或O(N^{\f ...

  4. [复习]莫比乌斯反演,杜教筛,min_25筛

    [复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...

  5. [基本操作] Mobius 反演, Dirichlet 卷积和杜教筛

    Dirichlet 卷积是两个定义域在正整数上的函数的如下运算,符号为 $*$ $(f * g)(n) = \sum_{d|n}f(d)g(\frac{n}{d})$ 如果不强调 $n$ 可简写为 $ ...

  6. 51nod 1220 约数之和【莫比乌斯反演+杜教筛】

    首先由这样一个式子:\( d(ij)=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1]\frac{pj}{q} \)大概感性证明一下吧我不会证 然后开始推: \[ \sum_{i=1 ...

  7. Mobius 反演与杜教筛

    积性函数 积性函数 指对于所有互质的整数 aaa 和 bbb 有性质 f(ab)=f(a)f(b)f(ab)=f(a)f(b)f(ab)=f(a)f(b) 的数论函数. 特别地,若所有的整数 aaa ...

  8. 洛谷 P6860 - 象棋与马(找性质+杜教筛)

    题面传送门 首先我们来探究一下什么样的 \((a,b)\) 满足 \(p(a,b)=1\).不难发现只要点 \((1,0)\) 能够到达,那么网格上所有点都能到达,因为由于 \((1,0)\) 能够到 ...

  9. 51nod 1244 莫比乌斯函数之和(杜教筛)

    [题目链接] http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 [题目大意] 计算莫比乌斯函数的区段和 [题解] 利 ...

随机推荐

  1. visual studio code的python编程中遇到的SyntaxError:invalid syntax问题的原因和解决办法

    一.问题重现描述 1.最开始,正常执行语句 2.当我在"终端窗口"输入python进入交互模式后,再选择默认的"在终端中运行python文件"运行代码报错 3. ...

  2. Electron-Vue 项目使用Element的el-table组件不显示

    1.electron-vue文件夹下的webpack.renderer.config.js配置文件,你会找到这样一行代码,需要添加白名单! let whiteListedModules = ['vue ...

  3. CS5216PIN TO PIN替换PS8402A方案|PS8402A电路设计原理图|CS5216芯片

    PS8402A是HDMI 电平移位器/中继器专为2型双模Display Port(DP++)电缆适配器应用而设计.它设计用于Display Port到DVI或Display Port到HDMI的2型适 ...

  4. 【jvm】07-偏向锁、轻量锁、重量锁到底是啥?

    [jvm]07-偏向锁.轻量锁.重量锁到底是啥? 欢迎关注b站账号/公众号[六边形战士夏宁],一个要把各项指标拉满的男人.该文章已在github目录收录. 屏幕前的大帅比和大漂亮如果有帮助到你的话请顺 ...

  5. Java初学者作业——简单程序根据用户输入的会员类型以及购物金额,判断是否能够享受活动优惠

    返回本章节 返回作业目录 需求说明: 超市周年庆举行购物满减活动,编写Java程序,根据用户输入的会员类型以及购物金额,判断是否能够享受活动优惠,会员类型的输入不限制大小写.具体获取规则:若为VIP会 ...

  6. 探索 dotnet core 为何在 Windows7 系统需要补丁的原因

    在一些 Windows 7 系统上,根据 dotnet 官方文档,需要安装上 KB2533623 补丁,才能运行 dotnet core 或 .NET 5 等应用.尽管非所有的设备都需要安装此,但这也 ...

  7. 初识python 之 爬虫:爬取豆瓣电影最热评论

    主要用到lxml的etree解析网页代码,xpath获取HTML标签. 代码如下: 1 #!/user/bin env python 2 # author:Simple-Sir 3 # time:20 ...

  8. Flask_响应(四)

    响应即视图函数的返回值,前面的例子的返回值都很简单,直接返回值.但是Flask Http协议的返回值中通常还会有以下几种不同的方式. 一.return元组 通过return一个元组构造响应信息. 语法 ...

  9. Linux命令查看各端口号占用情况

    yum -y install net-tools netstat -ntpl

  10. gitlab新增ssh

    https://blog.csdn.net/u011925641/article/details/79897517