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

【学术】数论分块保姆级教程

提示:本篇文章只讲数论分块(也叫整除分块)的基本形式,感兴趣可以自行查阅资料。

几个定义

  • 分块:
    顾名思义,就是把一个区间分成几小块,然后对于每个块进行单独的处理。它的核心思想是将一个大规模的输入划分成更小的“块”,然后针对每一块单独处理。(只需要了解就行)
  • {\left\lfloor\dfrac{}{}\right\rfloor} 符号,作用是向下取整,如 \(\dfrac{13}{5}=2.6\),则 \(\left\lfloor\dfrac{13}{5}\right\rfloor=2\)

推销一波我的洛谷号

考虑这道题:

给出 \(n\), \(k\), 求: \(\displaystyle f(n,k)=\sum_{i=1}^nk\%i\)

首先把%去掉

\[\begin{align} \displaystyle f(n,k)&=\sum_{i=1}^nk\%i\\&=\sum_{i=1}^nk-i\left\lfloor\dfrac{n}{i}\right\rfloor\\&=nk-\sum_{i=1}^ni\left\lfloor\dfrac{n}{i}\right\rfloor\\ \end{align} \]

那么关键就是求出:\(\sum_{i=1}^ni\left\lfloor\dfrac{n}{i}\right\rfloor\),这就是数论分块的功能了。

注意到\(\left\lfloor\dfrac{n}{i}\right\rfloor\)其实是有很多是相同的,比如当n=9时

\(i\) \(1\) \(2\) \(3\) \(4\) \(5\) \(6\) \(7\) \(8\) \(9\)
\(\left\lfloor\dfrac{n}{i}\right\rfloor\) \(9\) \(4\) \(3\) \(2\) \(1\) \(1\) \(1\) \(1\) \(1\)

那么我们完全可以将\(\left\lfloor\dfrac{n}{i}\right\rfloor\)的数一起计算,这种思想利用了分块思想,也是数论分块名字的由来。

那么如何计算每个块?也就是问对于固定数 \(l\),且 \(\left\lfloor\dfrac{n}{l}\right\rfloor=\left\lfloor\dfrac{n}{r}\right\rfloor\),求 \(max(r)\)

先给结论:\(max(r)=\left\lfloor\dfrac{n}{\left\lfloor\dfrac{n}{l}\right\rfloor}\right\rfloor\)

证明:

\(k=\left\lfloor\dfrac{n}{l}\right\rfloor\)

则由向下取整的定义:\(k\le\dfrac{n}{l}\lt k+1\)

取倒数得: \(\dfrac{n}{k}\geq l>\dfrac{n}{k+1}\)

所以 \(l\) 的最大值为 \(\dfrac{n}{k}\),即\(\left\lfloor\dfrac{n}{\left\lfloor\dfrac{n}{l}\right\rfloor}\right\rfloor\)

所以可以从上一块末尾编号+1作为当前块的起点,再用以上结论求出末尾,用等差数列公式一次计算整个块之和。

洛谷P2261

#include<bits/stdc++.h>
using namespace std;
long long n,k,ans;
void solve()
{ans=n*k;int l=1,r;for(;l<=n;l=r+1){if(k/l) r=min(k/(k/l),n);else r=n;ans-=(k/l)*(r-l+1)*(l+r)>>1;}
}
int main()
{while(cin>>n>>k)solve(),cout<<ans<<'\n';return 0;
}

时间复杂度分析:\(\mathcal{O(\sqrt{n})}\)
未完待续...

http://www.zskr.cn/news/42139.html

相关文章:

  • 2025数据库审计产品选型指南:十大厂商综合评测与趋势解析
  • 构建AI智能体:五十七、LangGraph + Gradio:构建可视化AI工作流的趣味指南 - 教程
  • CSP-S 2025 T2 [道路建设]
  • 关于 Java快速查找详细
  • 足式机器人适应多地形的方案
  • CF1700F Puzzle
  • 关于fcitx5预览窗口部分emoji乱码问题
  • attention论文及Transformer工作原理概述
  • 基于AIGC的图表狐深度评测:自然语言生成专业级统计图表的高效的技术实现
  • 深入解析:操作系统基础:了解进程、线程、协程,理解I/O模型(阻塞/非阻塞,同步/异步)。
  • 2025年11月酸角糕行业十大厂家排行榜:探索健康零食的新趋势与优选指南
  • mysql 查看数据库大小
  • 不越狱给iOS App装Tweak/插件:LiveContainer环境介绍与Tweak编写
  • 从零开始制作 MyOS(六)
  • 【2025臻选指南】酸角糕十大品牌深度解析:传承古法与现代创新的完美融合
  • 深入解析:开源 C++ QT QML 开发(十四)进程用途
  • 各种扩展模块
  • 2025氮化硼陶瓷推荐榜:福维科(山东)五星领跑,氮化硼陶瓷高温绝缘体/坩埚/套管/基板/高温构件/耐腐蚀构件优质厂家赋能产业升级
  • Maui 实践:JavaScript 动态生成集合属性的 get/set 代理
  • Apache是干嘛用的?Apache服务器搭建教程
  • ewomail docker搭建
  • Playwright为什么老是跑不稳?12个坑踩完我终于懂了!
  • 阿里云微服务引擎 MSE 及 API 网关 2025 年 10 月产品动态
  • 2025年厂房降温设备厂家新推荐排行榜白皮书,厂房降温设备哪个厂家好
  • 无畏级战列舰(HMS Dreadnought)
  • 华人数学家反击AI!一场关于和差集问题的突破接力赛
  • 2025年关于准分子气体订做厂家权威推荐榜单:激光气体/激光混合气/准分子激光气体源头厂家精选
  • 2025年关于北京民国老家具回收公司权威推荐榜单:各种品牌家具回收/工艺品木雕材料回收/檀香紫檀回收源头公司精选
  • 不怕水、不怕震、不怕脏:IPM100让信号采集在任何环境都稳定在线
  • 2025年广州搬家公司权威推荐榜单:大众搬家/蚂蚁搬家/厂房搬迁源头公司精选