浅谈整除分块

news2024/10/5 15:23:51

例题一

∑ i = 1 n ⌊ n i ⌋ \sum_{i=1}^n \lfloor\frac n i\rfloor\\ i=1nin

首先很容易想到直接求解,对于较大的数据, O ( n ) O(n) O(n)做法无法通过。

注意到函数 y = ⌊ n x ⌋ y=\lfloor\dfrac n x\rfloor y=xn的图像如下:

不难发现,随着 x x x 增大 , y y y单调不增,这说明对于相同值的 y y y 总是分布在同一块区域。

这启发我们根据 y y y值,把 x x x分组,每组“打包”算好。

这个时间复杂度显然是 O ( n ) O(\sqrt n) O(n )的,时间复杂度与 ⌊ n x ⌋ \lfloor\dfrac n x\rfloor xn的数量有关,这个数量大概是 2 n 2\sqrt n 2n

虽然图像上看 y y y的数量很大,但是考虑到许多 y y y不包含整数的 x x x,因此时间复杂度就是这样的了。

代码实现如下:

for(LL l=1,r;l<=n;l=r+1)
{
   r=n/(n/l);
   ans+=(n/l)*(r-l+1);
}

例题二

∑ i = 1 n k   m o d   i \sum_{i=1}^nk\bmod i\\ i=1nkmodi

对原式进行推导:

∑ i = 1 n k   m o d   i = ∑ i = 1 n k − i ⌊ k i ⌋ = n k − ∑ i = 1 n i ⌊ k i ⌋ \sum_{i=1}^nk\bmod i\\ =\sum_{i=1}^nk-i\lfloor\frac k i\rfloor\\ =nk-\sum_{i=1}^ni\lfloor\frac k i\rfloor\\ i=1nkmodi=i=1nkiik=nki=1niik

后面的部分可以用整除分块解决,对于每个 ⌊ n i ⌋ \lfloor \dfrac n i\rfloor in,内部相当于一个等差数列。

代码实现如下:

ans=n*k;
for(LL l=1,r;l<=n&&l<=k;l=r+1)
{
    r=min(k/(k/l),n);
    ans-=(k/l)*(r+l)*(r-l+1)/2;
}

例题三

函数 f ( i ) f(i) f(i) 表示 i i i 所有约数的和。

∑ i = L R f ( i ) \sum\limits_{i=L}^R f(i) i=LRf(i)

考虑前缀和作差,问题变成 [ 1 , R ] − [ 1 , L − 1 ] [1,R]-[1,L-1] [1,R][1,L1]

于是不难列出式子求解,与上一题很像。

例题四

∑ i = 1 n ∑ j = 1 m ( n   m o d   i ) ( m   m o d   j ) \sum_{i=1}^n\sum_{j=1}^m (n\bmod i)(m\bmod j)\\ i=1nj=1m(nmodi)(mmodj)

这道题显然也是推导。

∑ i = 1 n ∑ j = 1 m ( n   m o d   i ) ( m   m o d   i ) = ∑ i = 1 n ( n   m o d   i ) ∑ j = 1 m ( m   m o d   j ) = ∑ i = 1 n ( n − i ⌊ n i ⌋ ) ∑ j = 1 m ( m − j ⌊ m j ⌋ ) = ( n 2 − ∑ i = 1 n i ⌊ n i ⌋ ) ( m 2 − ∑ j = 1 m m ⌊ m j ⌋ ) \sum_{i=1}^n\sum_{j=1}^m (n\bmod i)(m\bmod i)\\ =\sum_{i=1}^n(n\bmod i)\sum_{j=1}^m (m\bmod j)\\ =\sum_{i=1}^n(n-i\lfloor\frac n i\rfloor)\sum_{j=1}^m (m-j\lfloor\frac m j\rfloor)\\ =(n^2-\sum_{i=1}^n i\lfloor\frac n i\rfloor)(m^2-\sum_{j=1}^m m\lfloor\frac m j\rfloor)\\ i=1nj=1m(nmodi)(mmodi)=i=1n(nmodi)j=1m(mmodj)=i=1n(niin⌋)j=1m(mjjm⌋)=(n2i=1niin⌋)(m2j=1mmjm⌋)

左右两边分开计算即可。

例题五

∑ i = 1 n ( n   m o d   i ) ( m   m o d   i ) \sum_{i=1}^n (n\bmod i)(m\bmod i)\\ i=1n(nmodi)(mmodi)

和上道题看着很像,不过这道题就很复杂了。

∑ i = 1 n ( n   m o d   i ) ( m   m o d   i ) = ∑ i = 1 n ( n − i ⌊ n i ⌋ ) ( m − i ⌊ m i ⌋ ) = ∑ i = 1 n ( n m − ( n + m ) i ⌊ n i ⌋ + i 2 ⌊ n i ⌋ ⌊ m i ⌋ ) = n 2 m − ( n + m ) ∑ i = 1 n i ⌊ n i ⌋ + ∑ i = 1 n i 2 ⌊ n i ⌋ ⌊ m i ⌋ \sum_{i=1}^n (n\bmod i)(m\bmod i)\\ =\sum_{i=1}^n (n-i\lfloor\frac n i\rfloor)(m-i\lfloor\frac m i\rfloor)\\ =\sum_{i=1}^n (nm-(n+m)i\lfloor\frac n i\rfloor+i^2\lfloor\frac n i\rfloor\lfloor\frac m i\rfloor)\\ =n^2m-(n+m)\sum_{i=1}^n i\lfloor\frac n i\rfloor+\sum_{i=1}^n i^2\lfloor\dfrac n i\rfloor\lfloor\frac m i\rfloor\\ i=1n(nmodi)(mmodi)=i=1n(niin⌋)(miim⌋)=i=1n(nm(n+m)iin+i2inim⌋)=n2m(n+m)i=1niin+i=1ni2inim

前面的式子我们已经可以轻松求出了,对于后面的这个东西,我们还是画图观察:

显而易见,仍然满足我们刚开始的两个性质,因此依旧使用之前的方式进行整除分块,时间复杂度依旧是 O ( n ) O(\sqrt n) O(n )

具体思想如下:

我们的值变化,要么是因为 ⌊ n x ⌋ \lfloor\dfrac n x\rfloor xn 变化了,要么是因为 ⌊ m x ⌋ \lfloor\dfrac m x\rfloor xm 变化了。

因此找出 ⌊ n x ⌋ \lfloor\dfrac n x\rfloor xn 变化的点和 ⌊ m x ⌋ \lfloor\dfrac m x\rfloor xm 变化的点中最近的一个,作为我们的 r r r 值。

后面部分的代码实现如下:

for(LL l=1,r=0;l<=n;l=r+1)
{
    r=min(n/(n/l),m/(m/l));
    ans=ans+(n/l)*(m/l)*(sum(r)-sum(l-1));
}

这里出现了一个函数,它的作用是求出: s u m i = ∑ i = 1 n i 2 sum_i=\sum\limits_{i=1}^ni^2 sumi=i=1ni2

公式是 ∑ i = 1 n i 2 = n ( n + 1 ) × ( 2 n + 1 ) 6 \sum\limits_{i=1}^ni^2=\dfrac {n(n+1)\times(2n+1)} 6 i=1ni2=6n(n+1)×(2n+1),用数学归纳法很好证明,这里不多赘述了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/503290.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hive语言

一、Hive的DDL语言&#xff08;数据库、数据表的增删改查操作) 二、Hive的DQL语言&#xff08;数据库查询语言&#xff09; 2.1Hive七子句 聚合函数&#xff1a;count()、sum()、max()、min()、avg()可以单独使用。(缩写&#xff1a;cs mm a) 2.1.1 分区查询与分区裁剪 SELEC…

OpenGL(九)——颜色

目录 一、前言 二、简单光源 三、光照场景 3.1 创建光源 3.2 光源顶点着色器 3.3 光源片段着色器 3.4 物体片段着色器 3.5 光源位置 一、前言 我们看到的物体颜色是通过光照在物体&#xff0c;然后反射到人眼成像&#xff0c;具体而言是物体不能吸收的颜色。如白光照射…

C++学习day--09 字符串比较、运算符

1、项目练习 第 1 节 项目需求、项目实现 项目实现&#xff1a; #include <iostream> #include <Windows.h> #include <string> using namespace std; int main( void ) { string name; string pwd; std::cout << " 请输入账号&am…

GPT-4的免费使用方法分享

目录 方法1&#xff1a;使用Ora.sh的LLM应用 方法2&#xff1a;使用https://steamship.com 方法3&#xff1a;使用https://nat.dev 方法4&#xff1a;http://tdchat.vip 方法5&#xff1a;使用Poe网站或App 方法6&#xff1a;使用 Opencat App 方法7:使用https://Huggin…

uniApp实现公农日历相互转换、公历、农历、阳历、阴历、calendar

文章目录 效果图1、组件1.1、html部分1.2、JavaScript部分1.3、style部分 2、使用组件3、总结 效果图 1、组件 1.1、html部分 <template><view v-if"isCalendar" class"calendar_box"><view v-show"!isTime" class"btn_ca…

Linux服务器使用supervisorctl命令部署Java服务详解

我们公司采用supervisorctl命令运行Java -jar包&#xff0c;觉得还是很方便的&#xff0c;此篇文章教你如何使用supervisorctl从零部署Java服务 安装jdk 首先肯定是下载安装Java的运行环境 jdk 下载地址&#xff1a;https://www.oracle.com/java/technologies/downloads/#jav…

WindowContainer相关类

WindowContainer类   从WindowContainer类的注释中可以看出该类中定义了一些公共的方法和属性给直接持有窗口的自己或者它的孩子使用&#xff0c;像RootWindowContainer、DisplayContent、DisplayArea、DisplayArea.Tokens、TaskDisplayArea、Task、ActivityRecord、WindowTok…

【话题讨论】-浅谈VR与AR

一、引言 随着ICT基础技术的发展&#xff0c;我们现在社会中的基础ict设施已经逐步完善&#xff0c;从而我们的社会也开始出现科幻片中才会有的场景&#xff0c;比如&#xff1a;我们可以构件一个虚拟3D沙盘。 还有我们熟悉的各类智能眼镜&#xff0c;已经进入到千家万户&…

干货 | Mendeley 的基础使用方法

Hello&#xff0c;大家好&#xff01; 这里是壹脑云科研圈&#xff0c;我是喵君姐姐~ 当阅读的文献越来越多&#xff0c;如何整理文献就成了一个大问题。文献管理软件则减轻了我们文献整理的负担。目前的文献管理软件使用较多的有Endnote、Notepress、Mendeley、Zotero等。 …

边无际首发ChatIoT:AI大模型从数字世界向物理世界迈进

将大模型的能力带到物理世界&#xff0c;除了微软、谷歌&#xff0c;还有一家中国的创业公司。边无际作为专注于物联网开发平台研发的科技公司&#xff0c;紧跟AI大模型带来的生产力变革&#xff0c;首发ChatIoT&#xff0c;率先将大模型的技术应用于物联网领域。 在微软、谷歌…

【高并发】网络模式

I/O 多路复用 多线程创建 服务器的主进程负责监听客户的连接&#xff0c;一旦与客户端连接完成&#xff0c;accept() 函数就会返回一个「已连接 Socket」&#xff0c;这时就通过 fork() 函数创建一个子进程&#xff0c;实际上就把父进程所有相关的东西都复制一份&#xff0c;…

多层感知器Multi-Layer Perception ,MLP

MLP神经网络的结构和原理 神经网络其实是对生物神经元的模拟和简化&#xff0c;生物神经元由树突、细胞体、轴突等部分组成。 生物神经元具有兴奋和抑制两种状态&#xff0c;当接受的刺激高于一定阈值时&#xff0c;则会进入兴奋状态并将神经冲动由轴突传出&#xff0c;反之则…

nginx配置文件nginx.conf的结构、各个指令(元素)的含义以及用法

nginx配置文件nginx.conf的结构、各个指令&#xff08;元素&#xff09;的含义以及用法 默认的nginx.confnginx.conf配置文件官方解释nginx.conf配置文件中每一条指令或指令快的含义是什么&#xff0c;以及用法&#xff08;使用范围&#xff1a;应该配置在什么地方&#xff09;…

今年的面试难度有点大....

大家好&#xff0c;最近有不少小伙伴在后台留言&#xff0c;又得准备面试了&#xff0c;不知道从何下手&#xff01; 不论是跳槽涨薪&#xff0c;还是学习提升&#xff01;先给自己定一个小目标&#xff0c;然后再朝着目标去努力就完事儿了&#xff01; 为了帮大家节约时间&a…

Selenium:利用select模块处理下拉框

目录 一、具体问题 二、解决方案 在UI自动化测试中&#xff0c;有时候会遇到页面元素无法定位的问题&#xff0c;包括xpath等方法都无法定位&#xff0c;是因为前端元素被设置为不可见导致。 这篇博客&#xff0c;介绍下如何通过JavaScript修改页面元素属性来定位的方法。。…

2021年科幻美剧和《人月神话》有啥渊源,书中有个小bug你知道吗

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>> 《人月神话》1975版和1995版的封面是这样的&#xff1a; 图1 1975版“The Mythical Man-Month”封面 图2 1995版“The Mythical Man-Month”封面 书中第1章“焦油坑&…

【JS每N日一练】【自动化】gitcode创建子项目并导入git

▒ 目录 ▒ &#x1f6eb; 导读需求 1️⃣ 创建子项目手动操作编写代码 2️⃣ 导入github项目手动操作编写代码 &#x1f6ec; 文章小结&#x1f4d6; 参考资料 &#x1f6eb; 导读 需求 github访问时好时不好的&#xff0c;而且克隆代码及其麻烦&#xff0c;经常失败。所以小…

C语言 | 结构体

C语言 | 结构体 文章目录 C语言 | 结构体C语言结构体详解:1.实例&#xff08;多重嵌套&#xff09;1-1.定义1-2.初始化 2.结构体2-1、结构体2-1-1、结构体的类型定义&#xff1a;2-1-2、结构体变量的定义&#xff1a;2-1-3、结构体变量的初始化&#xff1a;2-1-4、使用&#xf…

【夜莺(Flashcat)V6监控】1初识夜莺:介绍及部署

简介 夜莺&#xff08; Nightingale &#xff09;是一款国产、开源云原生监控分析系统&#xff08;从 v6 版本开始&#xff0c;尝试转型成为统一观测平台&#xff09;&#xff0c;集数据采集、可视化、监控告警、数据分析于一体。于 2020 年 3 月 20 日&#xff0c;在 github …

这就是阿里巴巴月薪20K+测试岗的面试题吗?让我这个3年的测试工程师看的冷汗直流.....

朋友入职已经两周了&#xff0c;整体工作环境还是非常满意的&#xff01;所以这次特意抽空给我写出了这份面试题&#xff0c;而我把它分享给伙伴们&#xff0c;面试&入职的经验&#xff01; 大概是在2月中的时候他告诉我投递了阿里巴巴并且简历已通过&#xff0c;2月23经过…