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

news/2025/11/6 19:58:31/文章来源:https://www.cnblogs.com/uyrpg/p/19197600

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

几个定义

  • 分块:
    顾名思义,就是把一个区间分成几小块,然后对于每个块进行单独的处理。它的核心思想是将一个大规模的输入划分成更小的“块”,然后针对每一块单独处理。(只需要了解就行)
  • {\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.mzph.cn/news/958054.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025数据库审计产品选型指南:十大厂商综合评测与趋势解析

2025数据库审计产品选型指南:十大厂商综合评测与趋势解析数据库审计作为数据安全体系中的重要组成部分,已从简单的日志记录工具发展成为集实时监控、风险分析、合规审计于一体的数据安全防护系统。根据《数据安全法》…

Word表格1.5倍行距居中问题

在Word表格中,当行距为1.0倍时,显示则正常;当1.5倍时无法居中对齐,需要按如下设置: 作者:我也是个傻瓜出处:http://www.cnblogs.com/liweis/签名:成熟是一种明亮而不刺眼的光辉。

L09_IOC?DI?MVC? 小白的简单理解和小白的操作

大学真是培养全面全能全知型人才的地方。 德智体美劳全面发展 体测为什么要分开三次进行呢 这么多学分,真有用的有哪几分呢上面牢骚,忽略 只学习认同的知识 邪修链接:https://www.bilibili.com/video/BV1caeBz1EoF/?…

详细介绍:后端_Redis 分布式锁实现指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

构建AI智能体:五十七、LangGraph + Gradio:构建可视化AI工作流的趣味指南 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

日总结 23

在软件开发中,DTO(Data Transfer Object,数据传输对象)和 Entity(实体)是两个不同场景下的核心概念,主要区别体现在用途、设计目的、属性特征等方面,具体如下:定义与核心用途 Entity(实体)本质是与数据库表…

详细介绍:基于Echarts+HTML5可视化数据大屏展示-车辆综合管控平台

详细介绍:基于Echarts+HTML5可视化数据大屏展示-车辆综合管控平台pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

基于ollama和streamlit的聊天机器人

基于ollama和streamlit的聊天机器人 利用deepseek蒸馏模型 model=deepseek-r1:1.5b这个可以在client.chat里头自己定义会自动下载import streamlit as st import ollama client=ollama.Client(host=http://localhost:1…

CSP-S 2025 T2 [道路建设]

前言 赛时只拿到了$ kruskal$板子的 \(A\)性质的 \(32pts\),真正唐完,,,, 切入 首先我们可以一眼顶针看出这是一道最小生成树的题,然后发现\(K\leq10\),可以想到直接暴力枚举\(2^k\)次的不同排列,然后跑一遍\(…

使用Git钩子+ husky + lint语法检查提高前端项目代码质量

@目录配置 Git Hook原理介绍安装 Husky启用 Husky添加 Git Hook测试脚本执行效果添加语法检查安装Prettier配置Prettier格式化规则调优添加 Git Hook添加Git提交规范检查安装commitlint配置commitlint添加 Git Hook 作…

[题解]P10277 [USACO24OPEN] Bessies Interview S

P10277 [USACO24OPEN] Bessies Interview S 第一问可以用优先队列模拟,存储每个人的结束时间即可。 第二问,一开始考虑的是对于某一时刻队列中结束时间最小的人是可以任意互换顺序的,所以就用并查集把这些人合在一起…

关于 Java快速查找详细

package V_Recursion;public class C_QuickSort {public static void main(String[] args) {int[] arr = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8};quicSort(arr, 0, arr.length - 1);for (int i = 0; i < arr.length; i++…

什么是Ansible 清单 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

完整教程:如何用开源软件

完整教程:如何用开源软件pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &…

第一次团队项目作业

软件工程团队项目第一次作业 - VALORANT 智能战术助手(第一部分) 作业信息这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/202501SoftwareEngineering/这个作业要求在哪里 https://edu.cnblogs.com/campu…

隨機變量本質之最終闡述

懷特博士: 我的理智所剩無幾,必須儘快警告您——切勿觸碰概率的本質!那个不可名狀的存在堂而皇之地通過霍爾教授的死宣誓著自己的主宰。Kl-mghrov——我無法準確發音,這個名字本身就讓燈光閃爍、指針顫動。我是如此…

足式机器人适应多地形的方案

基于视觉的感知运动 两阶段方法:流程:首先在完全可观测的马尔可夫决策过程(MDP) 中,利用特权信息训练一个强大的教师策略。然后,通过知识蒸馏,将教师策略的知识迁移给一个仅能使用真实传感器数据的学生策略。优…

使用vLLM实测3090和4090的大模型推理性能

使用`vLLM`测试下大模型并发推理场景下3090和4090两张显卡的性能表现,看下4090是否在高并发场景下具备更高的扩展性。 3090显卡和4090显卡在模型推理过程中的显存和GPU使用率都比较接近,1~8并发度场景下,3090和409…

CF1700F Puzzle

考虑如果是 \(1 \times n\) 怎么做。 显然是前缀和的差的绝对值的和,因为每次移动改变一位前缀和。 考虑上下交换的本质是什么,就是给第一行减 \(1\),第二行加 \(1\),反过来同理,那么在前缀和异号时显然交换是不劣…