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

P2261 学习笔记 整除分块详解

整除分块是什么

整除分块(又称数论分块)是数论中一种用于高效计算含有求和公式的技巧。当我们需要计算含有 \(\left \lfloor \dfrac ni \right \rfloor\) 的求和公式的技巧。

当我们需要计算

\[\sum_{i=1}^n f(i) \cdot g(\left \lfloor \frac ni \right \rfloor) \]

时,直接计算的复杂度为 \(O(n)\),但是若使用整除分块进行解题,利用 \(\left \lfloor \dfrac ni \right \rfloor\) 只有 \(O(\sqrt n)\) 种的性质,可以将时间复杂度降至 \(O(\sqrt n)\)

整除分块(又称数论分块)是数论中一种用于高效计算含有 \(\left\lfloor \frac{n}{i} \right\rfloor\) 求和公式的技巧。当我们需要计算 \(\sum_{i=1}^{n} f(i) \cdot g\left(\left\lfloor \frac{n}{i} \right\rfloor\right)\) 时,直接计算的时间复杂度为 \(O(n)\)。但利用 \(\left\lfloor \frac{n}{i} \right\rfloor\) 的值只有 \(O(\sqrt{n})\)这一性质,可以将计算复杂度降至 \(O(\sqrt{n})\)


整除分块核心思想

单调性与分段常数

对于给定的 \(n\),考虑函数 \(f(i) = \left\lfloor \frac{n}{i} \right\rfloor\)

  • \(i\) 增大时,\(\left\lfloor \frac{n}{i} \right\rfloor\) 单调不增。

  • 存在许多连续的 \(i\) 使得 \(\left\lfloor \frac{n}{i} \right\rfloor\) 的值相同。

  • 这些相同值的区间就是“块”。

块的范围

对于给定的一个整数 \(k = \left\lfloor \frac{n}{i} \right\rfloor\),满足该值的 \(i\) 的最大值是多少?
我们需要找到最大的 \(j\) 使得 \(\left\lfloor \frac{n}{j} \right\rfloor = \left\lfloor \frac{n}{i} \right\rfloor\)

由定义:

\[\left\lfloor \frac{n}{i} \right\rfloor = k \quad \Rightarrow \quad k \le \frac{n}{i} < k+1 \]

即:

\[\frac{n}{k+1} < i \le \frac{n}{k} \]

但这个推导方向可能有点绕。常用的结论是:

已知当前左端点为 \(l\),令 \(k = \left\lfloor \frac{n}{l} \right\rfloor\),则右端点 \(r\) 为:

\[r = \left\lfloor \frac{n}{k} \right\rfloor \]

更简单地:

\[r = \left\lfloor \frac{n}{\lfloor \frac{n}{l} \rfloor} \right\rfloor \]

并且可以保证,对于所有 \(i \in [l, r]\)\(\left\lfloor \frac{n}{i} \right\rfloor = k\)

证明思路

  • 对于 \(i \le r\),有 \(\lfloor n/i \rfloor \ge \lfloor n/r \rfloor = k\)

  • 对于 \(i \ge l\),有 \(\lfloor n/i \rfloor \le \lfloor n/l \rfloor = k\)

  • 结合两者得 \(\lfloor n/i \rfloor = k\)

算法流程

要计算 \(\sum_{i=1}^{n} f(i) \cdot g\left(\left\lfloor \frac{n}{i} \right\rfloor\right)\)

  1. 初始化 \(l = 1\)

  2. \(l \le n\) 时:

  • 计算 \(k = \lfloor n/l \rfloor\)

  • 计算 \(r = \lfloor n/k \rfloor\)。(注意:当 \(k=0\) 时,需要特殊处理,但通常当 \(l > n\) 时循环结束,实际上在整除分块中 \(k\) 始终 \(\ge 1\)

  • 此时 \([l, r]\) 区间内的 \(\lfloor n/i \rfloor\) 都等于 \(k\)

  • 将这一整块的贡献加到答案中:贡献 = \(g(k) \cdot \sum_{i=l}^{r} f(i)\)。通常如果 \(f(i)\) 是某个简单函数(比如常数 1,或者 \(i\) 本身),我们可以用前缀和快速计算这一段的和。

  • 更新 \(l = r + 1\),继续下一块。

P2261





我们要求:

\[G(n,k)=\sum_{i=1}^n k \bmod i \]

\[k \bmod i=k-i \cdot \left \lfloor \frac ki \right \rfloor \]

\[G(n,k)=nk-\sum_{i=1}^n i \cdot \left \lfloor \frac ki \right \rfloor \]

\[S(n,k)=\sum_{i=1}^n i \cdot \left \lfloor \frac ki \right \rfloor \]

所求的

\[G(n,k)=nk-S(n,k) \]

问题就转化为求 \(S(n,k)\)

  • \(i \ge k\),整除分块即可。
  • \(i < k\),对 \(S(n,k)\) 的贡献为 \(0\),不进行计算。

\[S(n,k)=\sum_{i=1}^{\min(n,k)} i \cdot \left \lfloor \frac ki \right \rfloor \]

进行整除分块即可。

code
#include <bits/stdc++.h>
#define pub public:
#define pri private:
#define fri friend:
#define Ofile(s) freopen(s".in", "r", stdin), freopen (s".out", "w", stdout)
#define Cfile(s) fclose(stdin), fclose(stdout)
#define fast ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
using namespace std;using ll = long long;
using ull = unsigned long long;
using lb = long double;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using pil = pair<int, ll>;
using pli = pair<ll, int>;constexpr int mod = 998244353;
constexpr int maxn = 2e5 + 5;ll n, k;ll calcS(ll n, ll k){ll l = 1, j = 0, r = 0, num = 0;while (l <= min(n, k)){num = k / l;r = min(k / num, min(n, k));j += num * (l + r) * (r - l + 1) / 2;l = r + 1;}return j;
}ll calcG(ll n, ll k){return n * k - calcS(n, k);
}int main() {freopen("std.in", "r", stdin);freopen("std.out", "w", stdout);fast;cin >> n >> k;cout << calcG(n, k) << endl;return 0;
}
http://www.jsqmd.com/news/424344/

相关文章:

  • 计算机专业知识全图谱:金管局计算机岗50分核心模块深度拆解(9000+字超详细指南)
  • 金管局计算机岗考试内容全解析:9000+字深度拆解技术、金融与政策三大维度
  • 细聊靠谱的特氟龙生产厂家排名,长荣铁氟龙排第几 - 工业推荐榜
  • 2026年上海一对一婚姻介绍所价格,专业婚介所服务性价比哪家高 - mypinpai
  • 金管局计算机岗备考必备知识点全图谱:9000+字深度梳理技术、金融与政策三大核心维度
  • 金管局计算机岗全流程详解:从报考到入职的9000+字超全指南
  • Leetcode 剑指 Offer II 162. 数字 1 的个数
  • OPC们的屠龙刀推荐:InfiniSynapse
  • YOLOv13涨点改进| TGRS 2026 | 独家创新首发、特征融合改进篇| 引入GSFM 全局语义感知融合模块,突出小目标并抑制复杂背景干扰,适合小目标检测、红外小目标检测、小目标分割,高效涨点
  • 一文详解,如何用Spring使用Redis作为消息订阅?
  • 2026年知名的杭州大宅装修/杭州别墅大宅装修实力推荐 - 行业平台推荐
  • 2026年评价高的铝合金电缆桥架/电缆桥架小桥架源头厂家推荐几家 - 行业平台推荐
  • 2026年大牌小样加盟趋势:口碑品牌引领市场潮流,目前知名的大牌小样加盟品牌悦容庄国际专注行业多年经验,口碑良好 - 品牌推荐师
  • 2026年知名的红油豆瓣酱/岳轩圆白红油豆瓣酱值得信赖的生产厂家 - 品牌宣传支持者
  • 2026年口碑好的大连装修公司/中山区大连装修公司优选推荐 - 行业平台推荐
  • OpenClaw 的爆火,给所有 AI 开发者上了一课:技术不难,懂用户才难
  • 天猫超市卡快速变现攻略 - 团团收购物卡回收
  • 2026年口碑好的贯通黑线烤漆龙骨/龙骨专业制造厂家推荐 - 行业平台推荐
  • 2026年靠谱的工业设备防水微动开关/自动化系统防水微动开关厂家实力哪家强 - 行业平台推荐
  • 2026年热门的尼龙布牛津布/古池料布牛津布精选厂家推荐 - 品牌宣传支持者
  • 2026年知名的高耐磨氢化丁腈橡胶/高强度氢化丁腈橡胶源头工厂推荐 - 行业平台推荐
  • 2026年口碑好的冷拉异型钢方钢/冷拉异型钢圆钢实力厂家如何选 - 行业平台推荐
  • IoTDB 与 MyCat 集成,实现关系/时序数据无缝协同
  • 2026年质量好的碳钢冷拉型钢/冷拉型钢轨道钢长期合作厂家推荐 - 品牌宣传支持者
  • 中国学者推翻“干预常识”登顶Lancet子刊!精心设计的“多组分干预”竟不如“发宣传手册”?
  • 2026年镇江专业的货架厂家选购指南,哪家口碑好 - mypinpai
  • 定价冲突原因深层次分析
  • 2026年知名的古池料布箱包布/素色布箱包布值得信赖的生产厂家 - 品牌宣传支持者
  • 聊聊昆明艺术生专业培训,哪家机构性价比高详情分析 - 工业品网
  • 2026年口碑好的高分子分散剂/农药分散剂厂家综合实力对比 - 品牌宣传支持者