一些求和式的估算 & 杜教筛时间复杂度证明
本文内容概要:
\(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\)
注意到
\]
放个图,应该能帮助理解
直接积出来,得到 \(\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\) ,代入并求和:
\]
\]
\]
证毕
如需了解更多 请自行百度调和级数
杜教筛时间复杂度证明
不妨考虑最简单的情形: \(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\) 的部分显然可以忽略,考虑剩下的
\]
于是时间复杂度就是 \(O(n^{3/4})\)
我们还可以优化,用线性筛预处理 \(S(1)\sim S(k) (k\ge \sqrt n)\)
这样就可以忽略 \(j\le k\) 的部分
\]
时间复杂度就是 \(O\left(k+\dfrac n{\sqrt k}\right)\) ,当 \(k\) 为 \(O(n^{2/3})\) 级别时取到最优 \(O(n^{2/3})\) 。
一些求和式的估算 & 杜教筛时间复杂度证明的更多相关文章
- 牛客练习赛84F-牛客推荐系统开发之下班【莫比乌斯反演,杜教筛】
正题 题目链接:https://ac.nowcoder.com/acm/contest/11174/F 题目大意 给出\(n,k\)求 \[\sum_{i_1=1}^n\sum_{i_2=1}^n.. ...
- hdu6607 min25筛+杜教筛+伯努利数求k次方前缀和
推导过程类似https://www.cnblogs.com/acjiumeng/p/9742073.html 前面部分min25筛,后面部分杜教筛,预处理min25筛需要伯努利数 //#pragma ...
- ●杜教筛入门(BZOJ 3944 Sum)
入门杜教筛啦. http://blog.csdn.net/skywalkert/article/details/50500009(好文!) 可以在$O(N^{\frac{2}{3}})或O(N^{\f ...
- [复习]莫比乌斯反演,杜教筛,min_25筛
[复习]莫比乌斯反演,杜教筛,min_25筛 莫比乌斯反演 做题的时候的常用形式: \[\begin{aligned}g(n)&=\sum_{n|d}f(d)\\f(n)&=\sum_ ...
- [基本操作] Mobius 反演, Dirichlet 卷积和杜教筛
Dirichlet 卷积是两个定义域在正整数上的函数的如下运算,符号为 $*$ $(f * g)(n) = \sum_{d|n}f(d)g(\frac{n}{d})$ 如果不强调 $n$ 可简写为 $ ...
- 51nod 1220 约数之和【莫比乌斯反演+杜教筛】
首先由这样一个式子:\( d(ij)=\sum_{p|i}\sum_{q|j}[gcd(p,q)==1]\frac{pj}{q} \)大概感性证明一下吧我不会证 然后开始推: \[ \sum_{i=1 ...
- Mobius 反演与杜教筛
积性函数 积性函数 指对于所有互质的整数 aaa 和 bbb 有性质 f(ab)=f(a)f(b)f(ab)=f(a)f(b)f(ab)=f(a)f(b) 的数论函数. 特别地,若所有的整数 aaa ...
- 洛谷 P6860 - 象棋与马(找性质+杜教筛)
题面传送门 首先我们来探究一下什么样的 \((a,b)\) 满足 \(p(a,b)=1\).不难发现只要点 \((1,0)\) 能够到达,那么网格上所有点都能到达,因为由于 \((1,0)\) 能够到 ...
- 51nod 1244 莫比乌斯函数之和(杜教筛)
[题目链接] http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 [题目大意] 计算莫比乌斯函数的区段和 [题解] 利 ...
随机推荐
- 突破技术限制,实现Web端静默打印
作为Web开发的同僚们,估计都有一个共同的烦恼,Web端为什么不能够像 CS端那样直接打印预览?直接移除掉打印预览界面不就可以了? 真实情况是Web端受限于浏览器的权限,无法直接访问打印机等本机资源. ...
- (原创)WinForm中莫名其妙的小BUG——RichTextBox自动选择字词问题
一.前言 使用WinForm很久了,多多少少会遇到一些小BUG. 这些小BUG影响并不严重,而且稍微设置一下就能正常使用,而且微软一直也没有修复这些小BUG. 写本系列文章,是为了记录一下这些无伤大雅 ...
- 「算法笔记」快速傅里叶变换(FFT)
一.引入 首先,定义多项式的形式为 \(f(x)=\sum_{i=0}^n a_ix^i\),其中 \(a_i\) 为系数,\(n\) 为次数,这种表示方法称为"系数表示法",一个 ...
- Log4j2基本使用入门
1.Log4j2简介 Apache Log4j 2是日志框架Log4j的升级, 它比其前身Log4j 1.x提供了重要的改进, 并且参考了Logback中许多有用的改进, 同时修复了Logback的一 ...
- Hbase单点安装Version1.1.5
Hbase单点安装,基于版本1.1.5, 使用hbase-1.1.5.tar.gz安装包. 1.安装说明 使用Hbase自带zookeeper和本地文件目录存储数据 2.安装规划 角色规划 IP/机器 ...
- Golang 简洁架构实战
文中项目代码位置:https://github.com/devYun/go-clean-architecture 转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.l ...
- PL/SQL连接时,报无法解析指定的字符串
前言: 工作原因,需要安装PL/SQL连接数据,oracle和PL/SQL都装好了,环境变量也配好了,启动PL/SQL进行连接数据库,结果报"无法解析指定的字符串",连接失败了. ...
- hadoop 之 hadoop2.7.7升级到hadoop2.8.5
服务器规划 准备阶段 停服务 stop-yarn.sh stop-dfs.sh 备份 备份NameNode目录 ---------- 101,102操作 ----------------- hdfs- ...
- js 中&&的使用
遇到下列代码goHome && (await router.replace(PageEnum.BASE_HOME)); &&这个逻辑与的作用是,当goHome为true ...
- shell 之 循环执行某操作
需求: 按月执行201904到202010的py脚本. 代码如下: #!/bin/bash i=201904 # 定义开始月份 while [ $i -le 202010 ] # 当i小于等于2020 ...