数论分块&&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

C#与Vector XL驱动库实战:CAN通道配置与端口访问详解

本文详细解析了使用C#调用Vector XL驱动库进行CAN总线通信开发的核心步骤。重点阐述了如何通过XL_GetDriverConfig获取硬件通道信息,并厘清channelMask与accessMask的区别与转换关系,最终指导开发者正确使用XL_OpenPort函数配置并打开CAN端口,为构建稳定的汽车电子测试与诊断应用奠定基础。

weixin_28452161的博客 362

「清华集训 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

CPU系统级验证——测试激励——imperas公司riscvOVPsimPlus文件分析

本分析重点关注该repo向量扩展部分。 1. repo简介 该repo是指令集验证的仿真环境包括,大部分是指令集的测试用例,也包含了一些模拟器,如riscvOVPsimPlus。 主要介绍的是riscvOVPsimPlus指令集模拟器,riscvOVPsimPlus(下面统称ISS)是imperas公司在riscvOVPsim基础上扩充了向量扩展的指令集模拟器,该repo于今年9月份部分开源 什么叫部分开源呢? 首先该repo必须在imperas官网注册下载,而且必须是企业用户(免费邮箱人家瞧不上.

知识,既贵,又便宜。 4460

迭代牛顿-欧拉法——机器人动力学逆解

迭代牛顿-欧拉法牛顿欧拉法的步骤向外回归(outward recursion)step 1step 2向内回归(inward recursion)step 3step 4牛顿欧拉法的三种形式无坐标系NE算法(Coordinate-Free Algorithm)连杆坐标系NE算法(Link-Coordinates Algorithm)3-D向量NE算法 牛顿欧拉法的步骤 牛顿欧拉法(NE)是求解机器人动力学逆解的一种方法。动力学逆解定义为:已知机器人的构型qqq和运动的速度q˙\dot{q}q˙​和加速度q¨

qq_41845878的博客 4098

奇思妙想之数论分块

数论分块是一种非常重要的思想。就是对于一些表达式,它的值只有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

银河麒麟V10离线升级OpenSSH实战:从编译到回滚全流程

OpenSSH作为Linux系统远程登录的核心组件,其版本升级直接关系到系统安全与等保合规。在信创环境下,银河麒麟V10自带的OpenSSH版本往往无法满足漏洞扫描与安全加固要求,而离线编译升级涉及依赖处理、编译参数、服务替换与回滚方案等多个技术环节。本文围绕银河麒麟V10(x86_64)平台,详细讲解OpenSSH离线升级的完整实操流程,包括环境摸底、依赖包安装、源码编译、配置文件兼容性处理、服务重启验证以及常见问题排查,并分享批量升级与安全加固的工程经验,帮助运维人员在不断网、不重装的前提下一次成功完成

weixin_30582943的博客 390

莫比乌斯反演入门(一)--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

速腾R128雷达+海康全景相机ROS数据采集避坑实录:从‘雷达不转’到MATLAB标定的完整流程

本文详细记录了速腾R128激光雷达与海康威视全景相机在ROS环境下的数据采集与MATLAB标定全流程。从硬件配置的常见陷阱(如雷达旋转参数设置)、驱动编译的依赖管理,到多传感器同步的实战技巧和MATLAB标定方法,提供了完整的避坑指南和技术方案。特别针对RoboSense R128雷达和海康相机的特殊需求给出了具体解决方案。

weixin_28717807的博客 1221

windows使用jupyter notebook读取文件路径的几种方法和设置默认打开路径

简单分享小虎这段时间以来学到的jupyter notebook操作技巧。

狂小虎/Anthony Dave的博客 KuangXiaoHu's Blogs 1万+

数论分块学习笔记

数论分块复习

Dawn的博客 666

用python画带有正负值的条形图

常见的条形图只能表现数据的大小,却不能表现值的正负关系。但是其实仅仅使用`pandas`和`matplotlib`两个包就可以实现y轴负轴的添加以及负值的显示,并且可以为正负值分别设置不同的颜色,让条形图看上去更加清晰,易于我们分析

weixin_44853840的博客 5384

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

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

MisDeer's blog 1004

模型预测控制(MPC)算法介绍

模型预测控制(Model Predictive Control,MPC)是一种先进的控制策略,广泛应用于工业过程控制、机器人控制、电力系统等领域。它基于系统的模型,通过滚动优化来预测系统未来的行为,并据此确定当前的最优控制输入。

AI的内部世界的博客 7175

android 蓝牙通讯demo

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

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

事情是这样的。。。 最近校内集训有这样一道题: 给定一个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

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

数论分块

面对这样一个问题 ∑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

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

WINCC7.3破解文件

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

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、付费专栏及课程。

余额充值