首页 > 其他分享 >数论分块

数论分块

时间:2024-03-26 13:11:42浏览次数:23  
标签:lfloor le frac 分块 数论 sqrt rfloor 取值

文章借用: 浅谈数论分块 - 洛谷专栏 (luogu.com)

求 $\sum_{i=1}^n \lfloor\frac{n}{i}\rfloor$,其中 $n$ 为常数。

为了方便我们的研究,我使用绘图软件画出了 $f(x) =\frac{7}{x}(1\leq x\leq 7)$ 的图像,也就是一种反比例函数的图像。

 因为求的值是向下取整的,显然函数 $f(x)$ 在 $[1,7]$ 区间内是单调递减的,我们不妨把 $\lfloor \frac n i\rfloor$ 取值相同的段取出来

 图像被分割为了 $7$ 个大块,但取值范围包含整数的只有 $4$ 个,那么如果我们可以把这些包含整数的块取出来,一次性得出一个块的答案,把整块对答案的贡献加上即可。

如果要实现整块一起统计,我们需要求出每一块的块头 $l$ 和块尾 $r$,则:

$$\sum_{i=1}^n \lfloor \frac n i \rfloor = \sum _{(l,r)} (r-l+1) \lfloor \frac n l \rfloor$$

给出一个结论: 对于整数 $i$,其所在块的右端点为 $\lfloor\frac{n}{\lfloor \frac n i \rfloor}\rfloor$,在此给出两种证明方式:

1. 代数法

首先我们要证明 $\lfloor\frac{n}{\lfloor \frac n i \rfloor}\rfloor$ 与 $i$ 在同一块,也就是:$$\lfloor\frac{n}{\lfloor\frac{n}{\lfloor \frac n i \rfloor}\rfloor}\rfloor= \lfloor\frac{n}{i}\rfloor$$

易证:

$$ \lfloor x\rfloor \leq x$$

$$x \le y\to \lfloor x\rfloor \le \lfloor y\rfloor$$

$$x \ge y\to \lfloor x\rfloor \ge \lfloor y\rfloor$$

则:

$$\lfloor\frac{n}{\lfloor\frac{n}{\lfloor \frac n i \rfloor}\rfloor}\rfloor \ge \lfloor\frac{n}{\frac{n}{\lfloor \frac n i \rfloor}}\rfloor=\lfloor\frac{n}{i}\rfloor$$

$$\lfloor\frac{n}{\lfloor\frac{n}{\lfloor \frac n i \rfloor}\rfloor}\rfloor \le \lfloor\frac{n}{\lfloor\frac{n}{ \frac n i }\rfloor}\rfloor=\lfloor\frac{n}{i}\rfloor$$

所以:

$$\lfloor\frac{n}{\lfloor\frac{n}{\lfloor \frac n i \rfloor}\rfloor}\rfloor= \lfloor\frac{n}{i}\rfloor$$

我们还要证明:

$$i \le \lfloor\frac{n}{\lfloor \frac n i \rfloor}\rfloor$$

也就是 $\lfloor\frac{n}{\lfloor \frac n i \rfloor}\rfloor$ 是这个块内最大的,即为块的右端点,这个很好证明:

$$\lfloor\frac{n}{\lfloor \frac n i \rfloor}\rfloor\ge \lfloor\frac{n}{ \frac n i }\rfloor=i$$

这样我们就以代数方式证明了结论,如果看不懂还有几何的。

2. 几何法

$\frac{n}{\lfloor \frac n i \rfloor}$ 的意义即为直线 $y=\lfloor \frac n i \rfloor$ 与直线 $y=\frac n x$ 的交点的横坐标,取整后就是这个交点左侧第一个整数横坐标,如图:

 $l_1$ 为直线 $y = \lfloor \frac n i \rfloor $,$l_2$ 为直线 $y=\lfloor \frac n i \rfloor +1$,我们不妨设 $l1$ 与直线 $y=\frac n x$ 的交点为 $P$,$l_2$ 与直线 $y=\frac n x$ 的交点为 $Q$,则:

$$\forall x_{Q} < x \le x_{p}, \lfloor\frac n x\rfloor = \lfloor\frac n i\rfloor$$

那么 $x_{P}$ 也就是 $\frac{n}{\lfloor \frac n i \rfloor}$ 左侧的第一个整点 $\lfloor \frac{n}{\lfloor \frac n i \rfloor}\rfloor$ 即为这些点里的最大整数点。

证毕.

复杂度证明: 

当 $x \in [1, \lfloor\sqrt n\rfloor]$ 这个区间,最多有 $\lfloor\sqrt n\rfloor$ 种取值。

当 $x \in (\lfloor\sqrt n\rfloor,n]$ 这个区间,$\lfloor\frac n x\rfloor$ 显然只能取到 $[1, \lfloor\sqrt n\rfloor)$这个区间,最多有 $\lfloor\sqrt n\rfloor$ 种取值。

则至多有 $2\lfloor\sqrt n\rfloor$ 种取值,复杂度为 $O(\sqrt n)$。

代码:

 for(int l=1,r;l<=x;l=r+1) r=x/(x/l),res=(res+((r-l+1)*(x/l))); 

标签:lfloor,le,frac,分块,数论,sqrt,rfloor,取值
From: https://www.cnblogs.com/o-Sakurajimamai-o/p/18096444

相关文章

  • 关于数论
    前由于博主比较蒻尚在学习所以先鸽亿会欧拉筛Elaina'scodeintn,phi[N],prime[N],cnt;boolpri[N];voidPhi(){ mst(pri,1); phi[1]=1; for(inti=2;i<=n;i++){ if(pri[i]){ prime[++cnt]=i; phi[i]=i-1; } for(intj=1;j<=cnt;j++){ intk=i*prime[......
  • Link with Monotonic Subsequence(分块,思维)
    First,let'sreviewsomedefinitions.Feelfreetoskipthispartifyouarefamiliarwiththem.Asequence aaaisanincreasing(decreasing)subsequenceofasequence bbbif aaacanbeobtainedfrom bbbbydeletionofseveral(possibly,zeroorall)......
  • 数论分块
    数论分块part1数论分块是什么一道例题引入uvaH(n)题目大意是给定一个n,求\(\sum^{n}_{i=1}\lfloor\frac{n}{i}\rfloor\)如果不能用\(O(n)\)的时间复杂度来算,能用什么办法?数论分块!!!在一个特定的区间内,\(\lfloor\frac{n}{i}\rfloor\)算出的数字是一样的。如下图颜色相同部分......
  • 数论(证明)
    1.同余1.1同乘性\({\displaystylea\equivb{\pmod{m}}}\)\({\displaystylec\equivd{\pmod{m}}}\)则\({\displaystylea*c\equivb*d{\pmod{m}}}\)证明\({a=k_1m+x}\);\({b=k_2m+x}\)\({c=k_3m+y}\);\({d=k_4m+y}\)\({a*c=k......
  • 分块学习笔记
    引入分块,顾名思义,把需要的维护的数据分成多个块来维护,思想为大段维护,小段朴素。区间修改,区间求和是一道线段树的板子,其复杂度为\(O(n\logn)\),考虑分块如何做。将序列分块,然后对于操作来说,中间的块直接查询和,然后将两边剩余的加起来即可。复杂度最优为\(O(n\sqrtn)\),不难证......
  • 数论小记
    做到就会补进来>w<\[d(ij)=\sum_{x|i}\sum_{y|j}[\gcd(x,y)=1]\]其中\(d\)是约数个数,证明如下:考虑\(x,y\)造就的\(xy=d\)的贡献,显然覆盖完全,那么我们现在需要一个\(d\)只能有一种产生贡献的方式。考虑一个质数\(p\)在\(x,y,d\)中的幂次分别为\(x',y',d'\),在\(......
  • 【博客】分块
    分块前言顾名思义分块就是将要维护的数据分成多个块来进行操作涉及整块的直接在块上操作涉及块中的暴力操作暴力即优雅分块是在线算法一般跟区间有关系算法如果一个序列长度为\(n\)我们一般取\(\sqrt{n}\)为一个块的长度这样块的数量也是\(\sqrt{n}\)原理如下设......
  • cuda从入门到精通(六)共享内存和循环分块实现CUDA矩阵乘
    本文系转载,出处:https://mp.weixin.qq.com/s/1w1WFPoUEvVECsurqmvJDw在CUDA编程中,共享内存和循环分块(looptiling)是两种常见的优化策略,它们可以帮助我们提高矩阵乘法的性能。共享内存(SharedMemory):在GPU中,每个线程块(block)都有自己的共享内存。与全局内存相比,共享内存的访问......
  • 【学习笔记】分块/莫队
    众所周知,分块是一种比较暴力的数据结构。虽说分块效率不高,但它能处理一些树状数组和线段树难以维护的东西(尤其是不具备可拆分性和可合并性的东西)。分块遵循整块维护,块内暴力的原则。所以我们一般先考虑一个暴力算法,再使用分块优化。建立分块:我们定义一个分块的结构体b,分别存......
  • [bzoj2120]数颜色/维护队列 (分块)
    数颜色/维护队列[做题笔记]此生第一道不贺题解\(AC\)的分块蓝题!!!题目描述墨墨@hs_mo购买了一套\(N\)支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问。墨墨会向你发布如下指令:\(Q\L\R\)代表询问你从第\(L\)支画笔到第\(R\)支画笔中共有几种不同颜色的......