首页 > 其他分享 >数论分块学习笔记

数论分块学习笔记

时间:2024-04-02 21:22:41浏览次数:19  
标签:lfloor mathbb le frac 分块 数论 rfloor 笔记 sqrt

数论分块学习笔记

性质

数论分块用于快速计算含有除法向下取整的和式,即形如 \(\sum_{i=1}^nf(i)g(\lfloor\frac{n}{i}\rfloor)\) 的式子。当预处理出 \(f\) 的前缀和时,数论分块可以在 \(O(\sqrt{n})\) 的时间复杂度下计算上述和式的值。

求解

引理 \(1\):

\(\forall a,b,c\in\mathbb{z},\lfloor\frac{a}{bc}\rfloor=\lfloor\frac{\lfloor\frac{a}{b}\rfloor}{c}\rfloor\)

证明:

不妨设 \(a=kb+r(0\le r<b)\),那么 \(\lfloor\frac{a}{b}\rfloor=k\)。

所以有 \(\lfloor\frac{a}{bc}\rfloor=\lfloor\frac{\frac{a}{b}}{c}\rfloor=\lfloor\frac{k+\frac{r}{b}}{c}\rfloor\)。

因为 \(k\) 是整数,\(r<b\),所以 \(\lfloor\frac{k+\frac{r}{b}}{c}\rfloor=\lfloor\frac{k}{c}\rfloor=\lfloor\frac{\lfloor\frac{a}{b}\rfloor}{c}\rfloor\)。

即 \(\lfloor\frac{a}{bc}\rfloor=\lfloor\frac{\lfloor\frac{a}{b}\rfloor}{c}\rfloor\)。

引理 \(2\):

\(\forall n\in\mathbb{N}_+,|\{\lfloor\frac{n}{d}\rfloor|d\in\mathbb{N}_+,d\le n\}|\le \lfloor2\sqrt{n}\rfloor\)​。

证明:

对于 \(d\le\lfloor\sqrt{n}\rfloor\),有 \(\lfloor\frac{n}{d}\rfloor\) 最多有 \(\lfloor\sqrt{n}\rfloor\) 种取值,因为 \(d\) 最多有 \(\lfloor\sqrt{n}\rfloor\) 种取值。

对于 \(d>\lfloor\sqrt{n}\rfloor\),有 \(\lfloor\frac{n}{d}\rfloor\) 最多有 \(\lfloor\sqrt{n}\rfloor\) 种取值,因为 \(\lfloor\frac{n}{d}\rfloor\le\lfloor\sqrt{n}\rfloor\) 。

即 \(\forall n\in\mathbb{N}_+,|\{\lfloor\frac{n}{d}\rfloor|d\in\mathbb{N}_+,d\le n\}|\le \lfloor2\sqrt{n}\rfloor\)。

结论:

对于两个整数 \(n,i\),满足 \(\lfloor\frac{n}{i}\rfloor=\lfloor\frac{n}{j}\rfloor,i\le j\le n\) 的最大的 \(j\) 值为 \(\lfloor\frac{n}{\lfloor\frac{n}{i}\rfloor}\rfloor\)。

证明:

令 \(k=\lfloor\frac{n}{i}\rfloor\),易知 \(k\le\frac{n}{i}\)。

所以有 \(\lfloor\frac{n}{k}\rfloor\ge\lfloor\frac{n}{\frac{n}{i}}\rfloor=\lfloor i\rfloor=i\)。

因为 \(j\) 改变时 \(k\) 为定值,所以 \(j\le\lfloor\frac{n}{k}\rfloor=\lfloor\frac{n}{\lfloor\frac{n}{i}\rfloor}\rfloor\)。

如此可以得到以下几个性质:

  • \(\lfloor\frac{n}{i}\rfloor\) 的值的个数不超过 \(\lfloor2\sqrt{n}\rfloor\),也就是说,枚举 \(\lfloor\frac{n}{i}\rfloor\) 的时间复杂度是 \(O(\sqrt{n})\)。
  • 通过 \(\lfloor\frac{n}{i}\rfloor\),假设使得这个值不变的区间的范围是 \([l,r]\),那么可以在 \(O(1)\) 时间内求解出该区间的最右边,并且 \(r+1\) 一定是下一个区间的最左边。

那么就有以下的代码思路:

考虑当 \(\lfloor\frac{n}{i}\rfloor\) 的值不变时,对于这些项的求和 \(\sum_{i=l}^rf(i)g(\lfloor\frac{n}{i}\rfloor)=g(\lfloor\frac{n}{i}\rfloor)\sum_{i=l}^rf(i)\),显然后半部分可以利用前缀和求出,只需要求出前半部分的值即可。

从 \(l=1\) 开始枚举,每次考虑区间 \([l,\lfloor\frac{n}{\lfloor\frac{n}{l}\rfloor}\rfloor]\) 对答案的贡献,也就是 \(g(\lfloor\frac{n}{l}\rfloor)\sum_{i=l}^{\lfloor\frac{n}{\lfloor\frac{n}{l}\rfloor}\rfloor}f(i)\)。后半部分利用前缀和快速求解,前半部分直接计算即可。

最后令 \(l=\lfloor\frac{n}{\lfloor\frac{n}{l}\rfloor}\rfloor+1\),作为下一个枚举区间的左端点。

显然这样的复杂度是 \(O(\sqrt{n})\) 的。

代码

for(int l=1,r;l<=n;l=r+1){
	r=n/(n/l);
    ans+=(f[r]-f[l-1])*g[n/l];
}

标签:lfloor,mathbb,le,frac,分块,数论,rfloor,笔记,sqrt
From: https://www.cnblogs.com/DycBlog/p/18111526

相关文章

  • Python笔记----列表(List)【附代码】
    1.列表介绍   列表既是Python中最基本的数据结构又是最常用的数据类型   创造列表很简单,只要把数据用中括号括起来,数据之间用逗号隔开就可以了。2.列表的创建   列表的数据项不需要具有相同的类型,不同数据类型都可以装,可以存储的信息非常丰富3.列表......
  • docker笔记
    常用命令临时启动镜像dockerrun-it--rm--namexxximage-name启动容器dockerrun-it-d--name-v/path:/path-p80:80-eMYSQL_USER="test"image-name进入容器dockerexec-itdocker-namebashnvidiadocker容器内使用显卡参考:https://cloud.tencent.com/devel......
  • Vue学习笔记72--element ui
    VueUI组件库:https://element.eleme.cn移动端常用UI组件库Vant:https://youzan.github.io/vantCubeUI:https://didi.github.io/cube-uiMintUI:https://mint-ui.github.ioNUTUI。。。。。。PC端常用UI组件库ElementUI:https://element.eleme.cnIViewUI:https://www.ivi......
  • ARM架构银河麒麟使用笔记-安装KVM
    ARM架构银河麒麟使用笔记-安装KVMarm银河麒麟KVM现在的平台是,主机用的是ubuntu,里面用qemu开启了arm架构的银河麒麟系统,系统可以访问百度。要做的事情是:在这个银河麒麟系统中,再安装qemu,再用qemu创建一个x86_64位的CentOS7.9.2009的系统,这个系统使用qemu的虚拟网桥方式与银河麒麟......
  • UOS使用笔记
    备份WPS序列号文件管理器点放大镜输入/opt/kingsoft/.auth/回车,然后把license2.dat文件复制出来备份,重装后再复制回去。添加柯尼卡美能达打印机柯尼卡美能达官网、统信兼容应用清单里提供的驱动都不全,少数有提供驱动的,也无法实现多面打印、彩色打印等基础功能。对此需要在......
  • python selenium 速查笔记
    1.安装与配置pipinstallselenium基本使用selenium都是为了动态加载网页内容用于爬虫,所以一般也会用到phantomjsmac下如果要配置phantomjs环境的话echo$PATHln-s<phantomjs地址><PATH中任一路径>至于chromeDriver,配置方法类似,下载地址:https://sites.google.com/a/chro......
  • 书生浦语第二期第二节课笔记(轻松玩转书生·浦语大模型趣味 Demo)
    以下内容是在InternStudio的开发机上运行的一、部署 InternLM2-Chat-1.8B 模型进行智能对话第一步:进入开发机后,在终端中输入以下环境命令配置进行环境配置studio-conda-ointernlm-base-tdemo#与studio-conda等效的配置方案#condacreate-ndemopython==3.10-......
  • 私人笔记:简单的在 Windows 上搭建 SFTP 服务
    查询资料显示OpenSS和freeSSH均可以搭建(本人均有试过)。几经周折,还是感觉freeSSHd方便简单。这次我们先来研究一下这个freeSSHd。首先赋上官网链接:http://www.freesshd.com打开是这个样子不过有很多同学打不开,不慌!赋上百度网盘链接:链接:https://pan.baidu.com/s/1BosFK-mg......
  • 蓝桥杯练习笔记(十六)
    蓝桥杯练习笔记(十六)一、输入示例:312111347453这是用到了m叉树的结论:对于某个m叉树的一个节点n,假如其有完整子树,则其左子节点l为l=(n-1)m+2,右子节点r为r=mn+1。基于此我们可以快速判断这个数在某些节点处的具体情况。比如是否是满叶子等等。蓝桥官网题解:......
  • 地平线旭日x3 deeplav3训练 分割模型训练流程(2024.4.2 笔记)
    地平线x3开发资料,版本2.6.2b旭日X3派用户手册https://developer.horizon.ai/api/v1/fileData/documents_pi/Quick_Start/Quick_Start.html地平线X3J3算法工具链https://developer.horizon.cc/api/v1/fileData/horizon_xj3_open_explorer_cn_doc/oe_mapper/source/advanced_con......