当前位置: 首页 > news >正文

数论分块

本质就是利用取整分数值的块状分布。

UVA11526 H(n)

题意: ∑ i = 1 n n i \sum_{i=1}^{n} \frac {n}{i} i=1nin

解析:

⌊ n i ⌋ \lfloor \frac{n}{i} \rfloor in 只有 O ( n ) O(\sqrt n) O(n ) 种取值,考虑将相同值同时处理。时间复杂度 O ( T n ) O(T\sqrt n) O(Tn )

对于 i i i,其块右端点 j j j 满足: j = ⌊ n ⌊ n i ⌋ ⌋ j = \lfloor \dfrac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor j=inn

证明:对所有 ⌊ n i ⌋ = k \lfloor \frac{n}{i} \rfloor=k in=k i i i:由 k ≤ n i k \le \frac{n}{i} kin,有 ⌊ n k ⌋ ≥ ⌊ n n i ⌋ = ⌊ i ⌋ = i \lfloor\frac{n}{k}\rfloor \ge \lfloor {\frac{n}{\frac n i}} \rfloor= \lfloor i \rfloor = i kninn=i=i

⌊ n k ⌋ \lfloor\frac{n}{k}\rfloor kn ⌊ n ⌊ n i ⌋ ⌋ \lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor inn 即为该块所在右端点。

代码

[AHOI2005] 约数研究

考虑约数 i i i 1 ∼ n 1 \sim n 1n 中出现次数,即 i i i 的倍数个数,为 n i \frac{n}{i} in。答案即为 ∑ i = 1 n ⌊ n i ⌋ \sum_{i=1}^{n} \lfloor{\frac{n}{i}}\rfloor i=1nin

时间复杂度 O ( n ) O(\sqrt n) O(n )

代码

约数和

同样考虑约数的贡献,即求 ∑ i = 1 n i × ⌊ n i ⌋ \sum_{i=1}^{n} i \times \lfloor\frac{n}{i}\rfloor i=1ni×in

考虑到原式子 < ∑ i = 1 n n < \sum_{i=1}^n n <i=1nnlong long 即可。

时间复杂度 O ( n ) O(\sqrt n) O(n )

代码

[CQOI2007] 余数求和

∑ i = 1 n k m o d i = ∑ i = 1 n ( k − ⌊ k i ⌋ i ) = n k − ∑ i = 1 n ⌊ k i ⌋ i \sum_{i=1}^n k \bmod i \\ =\sum_{i=1}^n (k - \lfloor{\frac{k}{i}}\rfloor i) \\ =nk-\sum_{i=1}^n \lfloor{\frac{k}{i}}\rfloor i i=1nkmodi=i=1n(kiki)=nki=1niki

枚举到 k k k 即可, n , k n,k n,k 同阶时时间复杂度 O ( n ) O(\sqrt n) O(n )

CF1485C Floor and Mod

妙。

法一

⌊ a b ⌋ = a m o d b \lfloor \frac{a}{b} \rfloor = a\bmod b ba=amodb

⌊ a b ⌋ = a − ⌊ a b ⌋ b \lfloor \frac{a}{b} \rfloor = a - \lfloor \frac{a}{b} \rfloor b ba=abab

⌊ a b ⌋ = a b + 1 \lfloor \frac{a}{b} \rfloor = \frac{a}{b+1} ba=b+1a

b + 1 ∣ a b+1 \mid a b+1a

⌊ a b ⌋ < b \lfloor \frac{a}{b} \rfloor < b ba<b,得 a < b 2 + b a < b^2+b a<b2+b

b + 1 ∣ a b+1 \mid a b+1a,由 a < b 2 + b a < b^2+b a<b2+b,得 b ∤ a b \nmid a ba,故 ⌊ a b ⌋ = a b + 1 \lfloor \frac{a}{b} \rfloor = \frac{a}{b+1} ba=b+1a

综上, b + 1 ∣ a b+1 \mid a b+1a a < b 2 + b a < b^2 + b a<b2+b 是原命题的一个充要条件。

答案即为
∑ b = 1 y min ⁡ ( x , b 2 + b − 1 ) b + 1 \sum_{b=1}^{y} \dfrac{\min(x,b^2+b-1)}{b+1} b=1yb+1min(x,b2+b1)

分段整除分块即可。

总结:根据整除关系、范围得到一些性质,从而找出充要条件。

代码

法二(官方做法)

⌊ a b ⌋ = a m o d b = k \lfloor \frac{a}{b} \rfloor = a\bmod b = k ba=amodb=k

a = k b + k a = kb + k a=kb+k

b + 1 = a k b+1=\frac{a}{k} b+1=ka

k < b k < b k<b,得 k + 1 < a k k+1<\frac a k k+1<ka,故 k k k 为根号级别。

枚举 k k k,考虑 b b b 的数量。可得 b ≤ x k − 1 b \le \frac x k - 1 bkx1,且 k < b ≤ y k < b \le y k<by

总结:观察 + 放缩 k k k 的范围。

代码

http://www.lryc.cn/news/197497.html

相关文章:

  • 宏任务与微任务,代码执行顺序
  • 正方形(Squares, ACM/ICPC World Finals 1990, UVa201)rust解法
  • 【算法设计与分析qwl】伪码——顺序检索,插入排序
  • Uniapp路由拦截-自定义路由白名单
  • 在中国可以使用 HubSpot 吗?
  • Java的基础应用
  • 【excel】列转行
  • 用Bing绘制「V我50」漫画;GPT-5业内交流笔记;LLM大佬的跳槽建议;Stable Diffusion生态全盘点第一课 | ShowMeAI日报
  • Java身份证实名认证-阿里云API 【姓名、身份证号】
  • ND协议——无状态地址自动配置 (SLAAC)
  • iOS开发UITableView的使用,区别Plain模式和Grouped模式
  • css美化滚动条
  • 【CANoe】XML Test Module使用实例
  • oracle的update语句where条件后的索引字段为空时不执行
  • RabbitMQ的特点
  • JS单选框默认选中样式修改,为白色背景中心有黑色小圆点的样式
  • 2023年下半年NPDP考试今天开始报名!
  • nfs+rpcbind实现服务器之间的文件共享
  • 10-k8s-身份认证与鉴权
  • 如何分析K8S中的OOMKilled问题(Exit Code 137)
  • 【0day】泛微e-office OA未授权访问漏洞学习
  • CSS盒子模型的详细解析
  • 【mfc/VS2022】计图实验:绘图工具设计知识笔记2
  • Redis数据结构之quicklist
  • MMKV(1)
  • centos 7.9 源码安装htop
  • Element UI之Button 按钮
  • dig 简明教程
  • 深度分析AMQP以及在rabbitMQ中的应用
  • GB/T 28627-2023 抹灰石膏检测