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

数论分块

时间:2024-01-24 21:12:44浏览次数:25  
标签:lfloor right frac val 分块 数论 rfloor left

数论分块

算法简介

能够在 \(\mathcal{O(\sqrt{n})}\) 的时间复杂度内计算出含有 \(\sum\limits_{i = 1}^{n} \left \lfloor \frac{k}{i} \right \rfloor\) 等式子。

令 \(a_i = \left \lfloor \frac{k}{i} \right \rfloor\),其主要思想为显然存在若干段连续区间内 \(a_i\) 值相同,那么我们就可以将一个块内的 \(a_i\) 一起计算,可以做到 \(\mathcal{O(\sqrt{n})}\) 的时间复杂度。

举例说明:

当 \(k = 10\) 时,我们可以作出以下表格:

\(i\) \(1\) \(2\) \(3\) \(4 \sim 5\) \(6 \sim 10\)
\(\left \lfloor \frac{k}{i} \right \rfloor\) \(10\) \(5\) \(3\) \(2\) \(1\)

当然,也可以作出以下 \(y = \frac{10}{x}\) 的反比例函数图像。

可以看到,\(4 \sim 5\) 以及 \(6 \sim 10\) 这两个连续段内 \(a_i\) 的值均相同。

算法过程

我们考虑如何去求每个块内的值。

可以发现对于每个块,我们可以通过递推计算得到其块内的值 \(val\),以及整个块的左右端点 \(l,r\)。

显然,其中 \(val = \left \lfloor \frac{k}{i} \right \rfloor,r = \left \lfloor \frac{k}{\left \lfloor \frac{k}{i} \right \rfloor} \right \rfloor\),\(l\) 的值可以根据上一次的 \(r' + 1\) 得来。

对于 \(r = \left \lfloor \frac{k}{\left \lfloor \frac{k}{i} \right \rfloor} \right \rfloor\),有证明:

显然 \(val = \left \lfloor \frac{k}{i} \right \rfloor\),\(val \leq \frac{k}{i}\),那么 \(i = \left \lfloor \frac{i}{\frac{k}{i}} \right \rfloor\),\(i \leq \left \lfloor \frac{k}{val} \right \rfloor\),所以 \(i\) 最大值即为 \(\left \lfloor \frac{k}{val} \right \rfloor = \left \lfloor \frac{k}{\left \lfloor \frac{k}{i} \right \rfloor} \right \rfloor\)。

P2261 [CQOI2007] 余数求和

对于这道题,我们就能写出如下代码:

int res = k * n;
for (int l = 1,r; l <= n; l = r + 1 ) {
	if (k / l) r = min(n,k / (k / l));
	else r = n;
	res -= (l + r) * (r - l + 1) / 2 * (k / l);
}
printf("%lld\n",res);

标签:lfloor,right,frac,val,分块,数论,rfloor,left
From: https://www.cnblogs.com/songszh/p/17985845/shulunfenkuai

相关文章

  • 数论——Pollard-Rho 学习笔记
    数论——Pollard-Rho学习笔记非平凡因数:\(n\)除了\(1\)和\(n\)以外的因数。Pollard-Rho算法是一种用于快速分解非平凡因数的算法。Pollard-Rho能在期望复杂度\(\mathcalO(n^{1/4})\)的时间内找到\(n\)的最小的非平凡因数。而根据Pollard-Rho,我们可以用来加速质......
  • 数论——Fermat素性检验、Miller-Rabin素性检验
    数论——Fermat素性检验、Miller-Rabin素性检验试除法与素性测试试除法:所有的试除法,无论是\(\mathcalO(n)\)的还是\(\mathcalO(\sqrtn)\)的,其本质都相同:即找\(n\)可能存在的因子\(k\),判断\(k\midn\)。素性测试:旨在不用分解因数的方式,判断一个数是否为质数;素性......
  • P5048 [Ynoi2019 模拟赛] Yuno loves sqrt technology III(分块)
    题意简述多次询问区间众数的出现次数,强制在线。\(n,m\le5\times10^5\),时限\(2\)秒,空限\(62.5\)MB。分析弱化版本题相较弱化版有以下特点:空间复杂度要求\(O(n)\)时间复杂度要求严格\(O(n\sqrtn)\),也就是说\(O(n\sqrt{n\logn})\)过不掉。貌似所有5e5的分块都是......
  • Ybt 金牌导航 6.3.A. 区间众数 / P4168 [Violet] 蒲公英(分块)
    题意简述多次查询区间\([l,r]\)的众数,若有多个取数值最小的。强制在线。\(n\le4\times10^4,m\le5\times10^4\)。分析考虑分块。首先预处理出块区间内的众数\(maj_{l,r}\)和每种数在某个块的前缀的出现次数\(cnt_{i,a_i}\),时空复杂度都是\(O(n\sqrtn)\)的。对于询......
  • 海亮01/19数论专题
    海亮01/19数论专题个人题单T1P2522题意对于给出的\(n\)个询问,每次求有多少个数对\((x,y)\),满足\(a\lex\leb\),\(c\ley\led\),且\(\gcd(x,y)=k\),\(\gcd(x,y)\)函数为\(x\)和\(y\)的最大公约数。题解先差分下,问题改成计算\(\sum_{i=1}^n\sum_{j=1}^m[\gcd......
  • 数论
    狄利克雷卷积一种函数间的运算。假设有函数\(f\)和\(g\),\(f*g=h,h(n)=\sum\limits_{d|n}f(d)\timesg(\frac{n}{d})\)。如果其中一个是常函数\(1\),则称其为狄利克雷前缀和(后缀和就是枚举倍数)。可以用高维前/后缀和\(O(n\log\logn)\)处理。板子(前、后缀):for(inti=1;i<=p......
  • 【Django】通用分块上传
    通用分块上传文件importos#通用路径分块上传defpiecemeal_public_load(path,original_md5_hash,chunk_index,upload_file,chunk_total,file_Name):"""path:存放路径(media/后面跟的路径)original_md5_hash:临时文件夹名称chunk_inde......
  • 【学习笔记】数论杂谈
    一.素数相关0.约定若无特殊说明,本部分做以下记号规定。\(p\in\mathbb{P}\),\(\mathbbP\)为质数集。\(\pi(n)\)表示\(1\)至\(n\)内的素数个数。\(P^{+}(n),P^-(n)\)分别表示\(n\)的最大/最小质因子。\(\nu_i\)表示\(i\)的可重质因子个数。1.素数定理\[\pi(......
  • 【学习笔记】数论函数与莫比乌斯反演
    一.数论函数基础数论函数:满足值域为整数的函数。本文下述的数若无特殊说明均为整数。若无特殊说明则钦定\(\displaystylen=\prod_{i=1}^kp_i^{e_i},p_i\in\mathbb{P}\)。\(\mathbb{P}\)表示质数集合,\(p_i\)互不相同。介绍几个常见的数论函数:\(I(n)\):恒等函数,无论\(n\)......
  • 【数学/数论】欧拉函数 - Phi
    引言自Mr.果讲了CF1900D之后,决定复习n月之前学习的知识:欧拉函数。\[\Large{{一、\underline{定义}}}\]\[\scriptsize\mathsf{一切的开始}\]欧拉函数,即\(\varphi(x)\)。\[\varphi(x)=\sum_{i=1}^{x}[\gcd(x,i)=1]\]它表示小于等于\(x\)的数中,与\(x\)......