首页 > 其他分享 >整除分块学习笔记

整除分块学习笔记

时间:2023-10-09 17:36:29浏览次数:40  
标签:lfloor frac 分块 rfloor large 笔记 bigl sqrt 整除

模型

求 \(\large\sum^{n}_ {i=1} \lfloor{\frac{n}{i}}\rfloor\)

假设 \(n\) 等于 10,我们可以列出下表:

\(\ i\) 1 2 3 4 5 6 7 8 9 10
\(\frac{10}{i}\) 10 5 3 2 2 1 1 1 1 1

如果我们的 \(n\) 更大时,我们可以发现 \(\frac{10}{i}\) 中有许多重复的地方。

我们可以将相同的分为一块,这样可以发现块不会超过 \(2\sqrt n\) 个。

证明
我们设当前块的值为 \(m\):
当 \(m\le \sqrt n\) 时,\(\frac nm\) 总共的个数,不会超过 \(m\) 的个数,因此最多有 \(\sqrt n\) 个块。
当 \(m> \sqrt n\) 时,\(\frac nm\) 的取值应该在 \([1,\sqrt n]\) 之间,因此也最多有 \(\sqrt n\) 个块。

综上,块的个数不超过 \(2\sqrt n\)。

推导

我们需要找到每个块的左右端点,设我们已知这个块的左端点 \(l\),则考虑怎么找到右端点 \(r\)。

设这个块的值为 \(x\),那么对于块中的每个数 \(i\),则有 \(x=\lfloor{\frac{n}{l}}\rfloor=\lfloor{\frac{n}{i}}\rfloor\)。

那么 \(r=max(i)\),因为 \(i\times x\le n\),我们可以设 \(i\times x=n\) 以此来找到最大的 \(r\)。

则 \(\large r=\lfloor{\frac{n}{x}}\rfloor=\bigl\lfloor{\frac{n}{\lfloor{n/l}\rfloor}}\bigl\rfloor\)。

下一个块的 \(l'\) 就应该是 \(r+1\)。

变形

\(\mathfrak{first.}\)

\(\large\sum^{min(n,m)}_ {i=1} \lfloor{\frac{n}{i}}\rfloor\lfloor{\frac{m}{i}}\rfloor\)

设 \(x1=\lfloor{\frac{n}{i}}\rfloor,x2=\lfloor{\frac{m}{i}}\rfloor\)。

则有 \(i\times x1\le n,i\times x2\le m\)。

则 \(r=\max(i)\),所以 \(r=\min(\bigl\lfloor{\frac{n}{\lfloor{n/l}\rfloor}}\bigl\rfloor,\bigl\lfloor{\frac{m}{\lfloor{m/l}\rfloor}}\bigl\rfloor)\)。

\(\mathfrak{second.}\)

已知 \(f(i)\) 为 \(i\) 的约数个数,求 \(\sum_{i=1}^n f(i)\)。
题目来源:P1403 [AHOI2005] 约数研究

我们直接计算每个数的约数个数显然会超时,那么我们不妨枚举每个约数的个数。

显然的 \(i\) 在 \(n\) 中的贡献即是:\(\lfloor{\frac n i}\rfloor\),

那么问题就转换为了:求 \(\large\sum^{n}_ {i=1} \lfloor{\frac{n}{i}}\rfloor\)。

整除分块即可。

\(\mathfrak{trird.}\)

已知 \(a,b,n\),求 \(\large\sum^{n}_ {i=1} \lfloor{\frac{n}{ai+b}}\rfloor\)

考虑换元,设 \(g=ai+b\)。

还是一样的,则对 \(\lfloor{\frac{n}{g}}\rfloor\) 做整除分块。

设 \(x=\lfloor{\frac{n}{g}}\rfloor\),则有 \(i\times g\le n\)。

则 \(r'=\max(i)\),所以 \(r'=\bigl\lfloor{\frac{n}{x}}\bigl\rfloor=\biggl\lfloor{\frac{n}{\lfloor{\frac{n}{g}}\rfloor}}\biggl\rfloor=\large\biggl\lfloor{\frac{n}{\lfloor{\frac{n}{al+b}}\rfloor}}\biggl\rfloor\)。

对于 \(g=ai+b,r'=\max(g)\),

则可以推出 \(i=\frac{g-b}{a},r=\max(i)=\max(\frac{g-b}{a})=\max(\frac{r'-b}{a})\)。

所以 \(r=\huge\large\Biggl\lfloor{\dfrac{\biggl\lfloor{\dfrac{n}{\lfloor{\frac{n}{al+b}}\rfloor}}\biggl\rfloor-b}{a}}\large\Bigg\rfloor\)。

标签:lfloor,frac,分块,rfloor,large,笔记,bigl,sqrt,整除
From: https://www.cnblogs.com/pdpdzaa/p/17752257.html

相关文章

  • SQL笔记
    SQL四种常用关系型数据库及其对应SQL语言分别是MySQL(mysql)Oracle(sqlplus)SQLServer(ssms)PostgreSQL(psql)。  SQL基础知识SQL的注释--单行注释/*多行注释这是新的一行结束行*/selectname,salaryfromtablename##运用注释调试sql......
  • 学到了,原来 gzip 是种`连续分块`的压缩算法
    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客zhihuGithub公众号:一本正经的瞎扯我想要表述的是:假设有10mb的数据使用gzip算法来压缩。有这样可能的做法:分配10mb的缓冲区,一次压缩10mb分配1mb的缓冲区,每次压缩1mb,分为十次压缩如果压......
  • Personalized Transformer for Explainable Recommendation论文阅读笔记
    PersonalizedTransformerforExplainableRecommendation论文阅读笔记摘要​ 自然语言生成的个性化在大量任务中都起着至关重要的作用。比如可解释的推荐,评审总结和对话系统等。在这些任务中,用户和项目ID是个性化的重要标识符。虽然Transfomer拥有强大的语言建模能力,但是没有......
  • 手敲,Ascend算子开发入门笔记分享
    本文分享自华为云社区《Ascend算子开发入门笔记》,作者:JeffDing。基础概念什么是AscendCAscendC是CANN针对算子开发场景推出的编程语言,原生支持C和C++标准规范,最大化匹配用户开发习惯;通过多层接口抽象、自动并行计算、孪生调试等关键技术,极大提高算子开发效率,助力AI开发者......
  • 算法笔记-生成树
    概念定义图:由点和边组成的集合生成图:图中删去若干个点和若干条边后剩下的子图生成树:恰好为树的生成图最小生成树:边权总和最小的生成树严格次小生成树:边权总和严格大于最小生成树且最小 最小生成树KruskalKruskal 是通过贪心法选边加入集合来求最小生成树的算法 算法......
  • 学习笔记-设计模式-创建型模式-单例模式
    单例模式一个类只有一个实例,并提供一个全局访问此实例的点,哪怕多线程同时访问。单例模式主要解决了一个全局使用的类被频繁的创建和消费的问题。单例模式的案例场景数据库的连接池不会反复创建spring中一个单例模式bean的生成和使用在我们平常的代码中需要设置全局的一些属......
  • 【2023年09月28日】stf61-测试基础第一天笔记
    stf61-测试基础第一天笔记计算机基础计算机既可以做数值运算,也可以做逻辑运算。数值运算:加减乘除等针对数值的操作逻辑运算:运算结果是真或者假的这一类运算,多用于条件判断举例:a=10,b=20如果a>b并且a>0,那么就执行a+b的操作,否则执行a-b的操作。a>b并且a>0——》逻辑运算a+b,a-b——......
  • Asp-Net-Core开发笔记:EFCore统一实体和属性命名风格
    前言C#编码规范中,类和属性都是大写驼峰命名风格(PascalCase/UpperCamelCase),而在数据库中我们往往使用小写蛇形命名(snake_case),在默认情况下,EFCore会把原始的类名和属性名直接映射到数据库,这不符合数据库的命名规范。为了符合命名规范,而且也为了看起来更舒服,需要自己做命名转换......
  • 【Pytorch】小土堆笔记(未完成)
    transforms在训练的过程中,神经网络模型接收的数据类型是Tensor,而不是PIL对象,因此我们还需要对数据进行预处理操作,比如图像格式的转换。同时我们可以对图片进行一系列图像变换与增强操作,例如裁切边框、调整图像比例和大小、标准化等,以便模型能够更好地学习到数据的特征。这些......
  • Vue学习笔记(七):绑定css样式
      1绑定class样式¶vue为HTML绑定css中的class样式是通过v-bind实现的。  1.1绑定单个class¶把需要绑定的样式class名赋值给一遍变量,然后通过变量v-bind绑定class属性,绑定后的class并不会覆盖原来的class属性,而是与原来的class进行叠加。如下所示,d......