数论分块&&P2261 [CQOI2007]余数求和

积性函数&数论分块&迪利克雷卷积&杜教筛&莫比乌斯函数及其反演 文章目录积性函数&数论分块&迪利克雷卷积&杜教筛&莫比乌斯函数及其反演1. 算法分析1.1 积性函数1.1.1 定义1.1.2 常见积性函数1.1.3 常见完全积性函数1.2 迪利克雷卷积1.3 数论分块1.4 杜教筛1.5 莫比乌斯反演1.6 数论公式推导套路小结2. 板子2.1 数论分块(整除分块)2.1.1 一维分块2.1.2 二维分块2.2 筛法求莫比乌斯函数3. 典型例题3.1 数论分块3.2 杜教筛3.3 莫比乌斯函数 积性函数&数论分块&迪利克雷 阅读详情

Label

数论分块

Description

给定正整数n,k(n,k≤109)n,k(n,k\le10^9)n,k(n,k≤109),求∑i=1nk\sum_{i=1}^{n}k∑i=1n​k modmodmod iii

Solution

前置引理:

引理1:∀a,b,c∈Z,⌊abc⌋=⌊⌊ab⌋c⌋\forall a,b,c\in \Z,\lfloor\frac{a}{bc}\rfloor=\lfloor\frac{\lfloor\frac{a}{b}\rfloor}{c}\rfloor∀a,b,c∈Z,⌊bca​⌋=⌊c⌊ba​⌋​⌋

(此处没用到,以后推式子会用)

引理2:∀n∈N+,∣{⌊nd⌋∣d∈N+,d≤n}∣≤2n\forall n\in\N^{+},|\{\lfloor\frac{n}{d}\rfloor|d\in \N^+,d\le n\}| \le2\sqrt n∀n∈N+,∣{⌊dn​⌋∣d∈N+,d≤n}∣≤2n​

证明:对于d≤⌊n⌋,⌊nd⌋d\le\lfloor\sqrt n\rfloor,\lfloor\frac{n}{d}\rfloord≤⌊n​⌋,⌊dn​⌋至多有n\sqrt nn​种取值;而对于d>nd>\sqrt nd>n​,此时有⌊nd⌋≤n\lfloor\frac{n}{d}\rfloor\leq\sqrt n⌊dn​⌋≤n​,最多也只有n\sqrt nn​种取值,证毕。

数论分块

数论分块一般用来解决含有⌊ni⌋\lfloor\frac{n}{i}\rfloor⌊in​⌋的求和式子。对于任意一个iii,我们需要O(1)O(1)O(1)求出最大的jjj使得⌊ni⌋=⌊nj⌋\lfloor\frac{n}{i}\rfloor=\lfloor\frac{n}{j}\rfloor⌊in​⌋=⌊jn​⌋。

Problem:求∑i=1n⌊ni⌋\sum_{i=1}^{n}\lfloor\frac{n}{i}\rfloor∑i=1n​⌊in​⌋

引理333:设⌊ni⌋=k\lfloor\frac{n}{i}\rfloor=k⌊in​⌋=k,则max{j∣⌊nj⌋=k}=⌊n⌊ni⌋⌋max\{j|\lfloor\frac{n}{j}\rfloor=k\}=\lfloor\frac{n}{\lfloor\frac{n}{i}\rfloor}\rfloormax{j∣⌊jn​⌋=k}=⌊⌊in​⌋n​⌋

证明:⌊ni⌋=k↔k≤ni<k+1↔nk+1<i≤nk\lfloor\frac{n}{i}\rfloor=k\leftrightarrow k\leq\frac{n}{i}<k+1\leftrightarrow \frac{n}{k+1}<i\leq\frac{n}{k}⌊in​⌋=k↔k≤in​<k+1↔k+1n​<i≤kn​

又由于iii为正整数,故i≤nk↔i≤⌊nk⌋=⌊n⌊ni⌋⌋i\leq \frac{n}{k}\leftrightarrow i\leq\lfloor\frac{n}{k}\rfloor=\lfloor\frac{n}{\lfloor\frac{n}{i}\rfloor}\rfloori≤kn​↔i≤⌊kn​⌋=⌊⌊in​⌋n​⌋,所以iii的取值上界为⌊n⌊ni⌋⌋\lfloor\frac{n}{\lfloor\frac{n}{i}\rfloor}\rfloor⌊⌊in​⌋n​⌋。

利用引理2、3,我们可以O(n)O(\sqrt n)O(n​)将[1,n][1,n][1,n]分成大约2n2\sqrt n2n​块,每一块O(1)O(1)O(1)求和即可。

对于此题

∑i=1nk\sum_{i=1}^{n}k∑i=1n​k modmodmod iii=∑i=1n(k−i⌊ki⌋)=nk−∑i=1ni⌊ki⌋=\sum_{i=1}^{n}(k-i\lfloor\frac{k}{i}\rfloor)=nk-\sum_{i=1}^{n}i\lfloor\frac{k}{i}\rfloor=∑i=1n​(k−i⌊ik​⌋)=nk−∑i=1n​i⌊ik​⌋

对于∑i=1ni⌊ki⌋\sum_{i=1}^{n}i\lfloor\frac{k}{i}\rfloor∑i=1n​i⌊ik​⌋,由于分块后每块对应区间内⌊ki⌋\lfloor\frac{k}{i}\rfloor⌊ik​⌋值不变,故等差数列求和后乘以⌊ki⌋\lfloor\frac{k}{i}\rfloor⌊ik​⌋便是此分块对答案的贡献。

算法时间复杂度O(n)O(\sqrt n)O(n​)

拓展:二维数论分块

求∑i=1min(m,n)⌊mi⌋⌊ni⌋\sum_{i=1}^{min(m,n)}\lfloor\frac{m}{i}\rfloor\lfloor\frac{n}{i}\rfloor∑i=1min(m,n)​⌊im​⌋⌊in​⌋。

此时将代码中 r = n/(n/i)替换成 r = min(n/(n/i), m/(m/i))即可(此时划分的块区间内⌊mi⌋,⌊ni⌋\lfloor\frac{m}{i}\rfloor,\lfloor\frac{n}{i}\rfloor⌊im​⌋,⌊in​⌋值显然不变,最多分成4n4\sqrt n4n​块)。

Code

#include<cstdio>
#include<iostream>
#define ri register int
#define ll long long
using namespace std;

ll n,k,l,r,ans;

int main()
{
	std::ios::sync_with_stdio(false);
	cin>>n>>k;
	l=1,ans=n*k;
	while(l<=n)
	{
		if(k/l==0) break;
		r=k/(k/l);
		if(r>n) r=n;
		ans-=(k/l)*(r*(r+1)/2-l*(l-1)/2);
		l=r+1;//分块时块的划分的移动
	}
	cout<<ans;
	return 0;
}
整除分块(数论分块) 转自大佬 一个有♂趣的问题: 求∑i=1N⌊Ni⌋,N≤1012\sum_{i=1}^N⌊\frac{N}i⌋ ,N≤10^{12}∑i=1N​⌊iN​⌋,N≤1012 显然不能直接做废话 经过一番冷静推理暴力打表 ,我们发现以下性质: 1.⌊Ni⌋⌊Ni⌋⌊Ni⌋最多只有2N2\sqrt{N}2N​种取值 证明:对于i≤Ni≤\sqrt{N}i≤N​, 只有 N\sqrt{N}N​ 种,对于 i... 阅读详情

相关推荐

基于容斥原理解决的有限制不定方程非负整数解(多重集组合数)计数问题

基于容斥原理解决的有限制不定方程非负整数解(多重集组合数)计数问题

guapi2333的博客 2812

学习笔记 ---- 数论分块(整除分块)

数论分块可以快速计算一些含有除法向下取整的和式(即形如∑i1nfig⌊ni⌋∑i1n​fig⌊in​⌋当可以在O1O(1)O1或者Olog2nO(log_2n)Olog2​n的复杂度内计算fr−flfr−fl时,数论分块就能在OnOn​或Onlog2nOn​log2​n的复杂度内计算出上述和式的值。它主要利用了富比尼定理(其实没啥用,不需要懂)。核心想法是把⌊。

weixin_55851276的博客 1633

2025-08-19利用opencv检测图片中文字及图片的坐标

该代码实现了图片中中文文本的检测与位置计算功能。主要使用CnOcr库进行OCR识别,结合OpenCV和PIL库处理图像。功能包括:1)检测图片中的中文文本及位置坐标;2)计算每个文本的像素宽度和高度;3)在原图上绘制文本边界框并标注识别结果。代码通过put_chinese_text函数解决中文显示问题,最终输出各文本内容、坐标位置及尺寸信息。适用于需要获取图片中文字精确位置的应用场景。

m0_58149406的博客 395

「清华集训 2012」模积和「数论分块」

题目传送门 题意 ∑i=1n∑j=1m(n&amp;amp;ThickSpace;mod&amp;amp;ThickSpace;i)(m&amp;amp;ThickSpace;mod&amp;amp;ThickSpace;j),i≠j\sum_{i=1}^{n}\sum_{j=1}^{m} (n \;mod \;i)(m \;mod \;j),i\ne ji=1∑n​j=1∑m​(nmodi)(mmodj),i̸​=j 题解 先...

_Gion 456

科研党福音:如何用Zotero+Paper Agent打造你的AI论文速递系统(附详细配置教程)

本文为科研工作者提供了一套利用Zotero和开源工具Paper Agent构建自动化AI论文速递系统的详细教程。该系统能基于用户在Zotero中的文献库智能学习研究兴趣,每日自动从arXiv等平台筛选、下载并深度解读最相关的前沿论文,生成个性化日报,实现从被动接收到主动精准获取的知识工作流重塑。

kite3的博客 515

【YOLO26实战全攻略】19——智慧交通(一):高速抛洒物与事故检测全流程落地

在智慧交通领域,高速公路抛洒物、交通事故等突发状况常导致二次事故与大规模拥堵,传统人工监控存在响应滞后、覆盖有限等痛点。本文基于Ultralytics YOLO26算法,结合ByteTrack多目标跟踪技术,构建从数据准备、模型训练到边缘部署的全栈式智慧交通检测系统。核心内容包括:多车型专属数据集构建、抛洒物检测模型优化、ByteTrack轨迹跟踪集成、异常事件(违停/逆行/碰撞)识别逻辑实现,以及NVIDIA Jetson边缘设备部署方案。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1492

奇思妙想之数论分块

数论分块是一种非常重要的思想。就是对于一些表达式,它的值只有sqrt(n)种,那么我们就对于这sqrt(n)种数值进行分块,然后暴力算即可。我们通过下面一道例题来了解数论分块:BZOJ1257 Description 给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值 其中k mod i表示k除以i的余数。 例如...

stevensonson的博客 1752

小孙学变频学习笔记(二)变频器的逆变电路

本文主要介绍了变频器中逆变电路的核心器件IGBT及其应用。IGBT是一种电压控制型三端半导体开关器件,具有开关频率高、功耗低的优点,在变频器中仅使用截止和饱和导通状态。文章详细分析了IGBT的结构特性、与晶闸管的区别,以及由四个IGBT组成的直流转交流逆变电路原理。重点阐述了IGBT并联反向二极管的作用:提供电流反向通路、避免反向电压损坏器件、提高开关效率等。最后提供了相关学习参考网址供读者进一步研究。

qq_43091070的博客 1197

莫比乌斯反演入门(一)--P2522

前置知识: 1.数论分块,二维数论分块 2.⌊abc⌋=⌊⌊ab⌋c⌋\lfloor\frac{a}{bc}\rfloor = \lfloor\frac{\lfloor\frac{a}{b}\rfloor}{c}\rfloor⌊bca​⌋=⌊c⌊ba​⌋​⌋ 3.gcd(i,j)=k→gcd(ik,jk)=1gcd(i,j)=k \to gcd(\frac ik,\frac jk)=1gcd(i,j)=k→gcd(ki​,kj​)=1 OI WIKI 上面莫比乌斯反演前置知识 题目大意: 地址 求∑i=ab

qq_35577488的博客 404

AI测试实战:手把手教你做LLM(大模型)性能测试「含完整代码」

大模型API性能测试是评估模型服务响应能力、吞吐量和资源效率的关键手段。核心指标包括总响应时间、吐字率、首token延迟、输入/输出tokens数量、QPM等。测试流程涵盖构造负载、并发请求、数据采集和指标计算。优化建议针对吐字率低、首token延迟高、QPM偏低等问题,从模型、硬件、系统等多层面提出解决方案。

blues_C的博客 1431

Autosar PWM模块的配置和使用

在上面的代码中,我们首先配置了PWM的初始化参数,包括频率和分辨率。GPIO Driver:由于PWM信号需要输出到特定的引脚上,因此我们还需要使用GPIO驱动程序来控制引脚的状态。通过合理配置和应用PWM模块,我们可以实现对汽车电子系统中各种功能的精确控制,从而提高汽车性能和用户体验。在实际应用中,我们可以根据需要进行更多的配置和调整,以实现灵活的PWM控制。PWM Driver:这是主要的PWM驱动程序,负责产生PWM信号并输出到相应的引脚上。接下来,我们需要配置PWM模块的参数。

TcData的博客 682

数论分块学习笔记

数论分块复习

Dawn的博客 666

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

[Uva 11990] "Dynamic" Inversion (二维分块)

Uva - 11990 动态逆序对,求删除一个点之前序列中逆序对的个数 首先倒过来看这个问题,把点先全部删掉 然后从最后一个点开始倒着往数列中加点 求加完这个点逆序对的变化分块做法,把下标看成 x,值看成 y 这样就变成了平面上的点, 将平面分成 bsiz∗bsizbsiz*bsiz,bsiz=N‾‾√bsiz=\sqrt{N} 加入一个点的时候,在它左上方区域的和右下方区域中的点的数

MisDeer's blog 1004

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

新数论分块的推广及其复杂度证明 【数论】【分块】

事情是这样的。。。 最近校内集训有这样一道题: 给定一个N(N<1e12),问有多少个M使得 (N%M)|M. 校内绝大部分的人(其实就是除了我外)都是用质因数分解过的,大概是: 因为gcd(n,m)=gcd(n%m,m),且gcd(n%m,m)==n%m (题意),所以就有gcd(n,m)=n%m. 枚举a=n%m,则要n=ax,m=ay 满足 gcd(x,y)=1. 又因为m|n-a ...

Zayin___的博客 1061

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

数论分块

面对这样一个问题 ∑i=1n⌊ni⌋ \sum_{i = 1}^{n}{\lfloor \frac{n}{{i}} \rfloor} i=1∑n​⌊in​⌋ 可以选择用O(n)的复杂度去暴力求解,但我们可以发现n/i的值在某一段中是相等的,比方说5/ 3, 5/ 4 ,5/5的大小都为1,所以可以用这一段的长度Len 乘以这一段的值就是可以快速求和。 代码: int ans = 0; for(in...

sunmaoxiang的博客 4572

20200223 专题:数论分块(咕~~~)

总览: 解决一类求和问题∑i=1n⌊ni⌋\sum_{i=1}^{n}{\lfloor \frac {n}{i} \rfloor}∑i=1n​⌊in​⌋ 发现一段iii中⌊ni⌋\lfloor \frac {n}{i} \rfloor⌊in​⌋的值不变,于是可以分块求和 假设每一块的左右区间是[l,r][l,r][l,r],则知道lll后,r=nn/lr=\frac {n}{n/l}r=n/ln​...

hongkongreporter 314

数论分块原理

数论分块模板题:,采用数论分块可以优化到。 为书写方便以下都写做n/i 首先我们要知道这一点:存在一些连续的x1,x2...xk,有n/x1=n/x2=...=n/xk。比如100/34=100/35=100/36=...=100/50。对于这些连续出现的,我们只需要知道出现次数,然后只用计算其中一个数就可以了,比如:(n/x1)*(xk-x1+1)。 现在要找出n,x1和xk的关系。 下图用数轴描述了i和n/i的部分取值。其中 n/(i-b)=n/(i-b+1)=n/(i-b+2)=...=n.

fire_lch316的博客 454

数论分块之整除分块

  数论分块之整除分块 前言 最近在学莫比乌斯反演,然而只看懂了莫比乌斯函数,然后反演看着一脸懵逼,最后只看懂了数论分块里面的一个分支内容(也是莫比乌斯反演的前置姿势),整除分块 于是写一篇博文记录一下整除分块 整除分块 整除分块是用于快速处理形似   ∑i=1n⌊ni⌋∑i=1n⌊ni⌋ 的式子的方法 很显然,这个可以O(n)O(n)得到答案。但是,在某些题目中,毒瘤出题人将数据...

Orbita_wangtao 758

P2522 Problem b 莫比乌斯反演+数论分块+二维前缀和

#include <bits/stdc++.h> #define rll register ll #define ll long long using namespace std; const int N = 5e4+100; int p[N], prime[N], mu[N], cnt; void primes(int n){ mu[1] = 1; for(int i = 2; i <= n; i++){ if(!p[i]) p[i] = prime[++cnt] = i.

__surtr的博客 222

数论分块入门

数论分块一般解决的就是形如(这种式子的求解) ** 例一:bzoj1968: [Ahoi2005]COMMON 约数研究 ** Description Input 只有一行一个整数 N(0 < N < 1000000)。 Output 只有一行输出,为整数M,即f(1)到f(N)的累加和。 题目分析 答案即为1…x1…x的所有约数个数和。 #include<bits/stdc...

Stydwn的博客 737

数论分块(整除分块)

前言: 断更太久,已经忘了博客怎么写了。。 这篇博客用来介绍带整除式子的快速求解办法。   符号说明: ⌊ab⌋\left \lfloor \frac{a}{b}\right \rfloor⌊ba​⌋ :aaa除以bbb向下取整。 ⌈ab⌉\left \lceil \frac{a}{b}\right \rceil⌈ba​⌉ :aaa除以bbb向上取整。 ∑i=1nf(...

Zimba_的博客 1826

学习之整除分块(数论分块)

学习来自:整除分块(数论分块) 简单例题P1403 [AHOI2005]约数研究 P3935 Calculating 模板: #include<bits/stdc++.h> using namespace std; typedef long long ll; const ll mod=998244353; ll cal(ll n){ ll an...

ccsu_deer 879

【数学技巧】整除分块

在对于求解∑i=1n⌊ni⌋\sum_{i=1}^{n} \lfloor\frac{n}{i}\rfloor∑i=1n​⌊in​⌋的时候,一般暴力跑的话需要O(n)O(n)O(n)的复杂度。 但是很神奇的事情是有一段的⌊ni⌋\lfloor\frac{n}{i}\rfloor⌊in​⌋是相等的,这样对于每一段我们只 需要计算一次即可。 因此我们的代码可以这样写 for(int l=1,r;l&amp;lt...

duanghaha的博客 1909

二维数组的空间复杂度_数据结构之数组

数组是最基础的数据结构,你可能觉得它非常简单。其实真的非常简单,但里面有一些细节还是稍微要注意一下的。先看一下数组的定义:数组是一种线性的数据结构,用连续的内存存放相同类型的数据。线性结构表示数据只有前后两个方向,像队列、栈、链表都是线性结构。与之对立是的非线性结构,其表示不止前后两个方向,像树、堆、图都是非线性结构。连续的内存这个很好理解,表示程序会在内存中开辟一段连续的空间用于存放数...

weixin_39560064的博客 1597
上一篇: poj3904&&SP4191 Sky Code
下一篇: P2522 [HAOI2011]Problem b
guapi2333
博客等级 码龄9年 7粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值