整数分块学习笔记

算法学习——整数分块 整数分块的介绍 阅读详情

整数分块学习笔记

——by sunzz3183


引入

∑i=1n⌊ni⌋ \sum\limits_{i=1}^{n}\left \lfloor \frac{n}{i} \right \rfloor i=1nin

正常求法:

直接枚举每个 nnn,时间复杂度为 O(n)O(n)O(n)

可是,如果 1≤n≤1081\leq n \leq 10^81n108 呢?

所以,我们要用到分块的思想:整数分块

整数分块

显然

∃1≤l≤r≤n,⌊ni⌋=⌊nj⌋(l≤i,j≤r) \exists 1\leq l\leq r \leq n,\left \lfloor \frac{n}{i}\right \rfloor =\left \lfloor \frac{n}{j}\right \rfloor (l\leq i,j\leq r) ∃1lrn,in=jn(li,jr)

我们会浪费很多的时间。

那么,有多少段相等呢?

我们来看一张图

显然,存在一个 kkk 使得

⌊nl⌋=k \left \lfloor \frac{n}{l} \right \rfloor =k ln=k

并让

r=⌊nk⌋ r=\left \lfloor \frac {n}{k }\right \rfloor r=kn

⌊ni⌋=⌊nj⌋(l≤i,j≤r) \left \lfloor \frac{n}{i}\right \rfloor =\left \lfloor \frac{n}{j}\right \rfloor (l\leq i,j\leq r) in=jn(li,jr)

而显然 kkk 是由 lll 得到,rrr 是由 kkk 得到。

所以,我们去枚举 lll,并让 k,rk,rk,r 等于上面的东西。

而下一段区间的 lllr+1r+1r+1

每一段的值为

⌊nl⌋(r−l+1) \left \lfloor \frac{n}{l} \right \rfloor (r-l+1) ln(rl+1)

时间复杂度 O(n)O(\sqrt{n})O(n)

代码

int division_block(int n){
   int sum=0;
   for(int l=1,r;l<=n;l=r+1)
       r=n/(n/l),sum+=n/l*(r-l+1);
   return sum;
}
数论与线性代数——整除分块【数论分块】的【运用】&【思考】&【讲解】&【证明(作者自己证的QWQ)】 整除分块与数论分块的运用,思考,讲解,证明(简单易懂) 阅读详情

相关推荐

数论-整数分块

码题集刷题

asddsa1233122132的博客 330

《夜深人静写算法》数论篇 - (23) 整数分块

数论篇 - (23) 整数分块

英雄哪里出来 1046

夜深人静写算法(三十八)- 整数分块

饭不食,水不饮,题必须刷

英雄哪里出来 4062

整数分块

数论 整数分块 整数分块用于快速处理,形如: 通过推理可以发现,假设它的起始下标是l,那么它的结束下标为r = n / (n / l)。 例如当n = 5时,sum = 5 + 2 + 1 + 1 + 1; 需要注意的是除以0的时候。 例题 #include <cstdio> typedef long long ll; ll solve() { ll n, ans = 0; scanf("%lld", &n); for (ll l = 1, r; l <=

qq_47783181的博客 325

整数分块(基础版)

蒟蒻的整数分块

2301_81675368的博客 543

整数分块 (因数平方和)(余数之和)

个区间, 对每个区间进行求值,每个区间值相同, 只需算连续平方和,可以直接用公式求平方和值, 故每个区间只需要算一次即可。首先看到数据范围为1e9级别,故可以想到用分块思想,优化到。的约数,时间复杂度肯定不够, 所以想到反着求。划分为前半段和后半段的话, 可计算出只需操作。此题在计算平方和时可能数据量会超大(超LL),所以我们只需要求哪些数包含约数。一般在算法中遇到时间复杂度为。, 对于各个区间值为==这个数对答案的总贡献为。即计算区间和每个==

三分梦的博客 1362

整数分块练习

小G的约数——牛客练习赛77 题目链接:https://ac.nowcoder.com/acm/contest/11160/C 大意 已知F(n)为n的约数和,G(n)=F(1)+F(2)+…+F(n-1)+F(n) 求G(G(n)). 思路 n最大时易知G(n)=2056198403,常规约数和求法复杂度为O(n),很明显不能用来求G(G(n))。 这时候需要引入整数分块的思路,O($ \sqrt{n} $)的复杂度完全可以胜任。 具体整数分块证明就不做了,说一点可以直接拿来用的东西。 nt=nt′\fr

欠我半块小饼干的博客 509

【数论】整除分块(数论分块

整除分块(数论分块)的介绍,包括复杂度分析,分块边界计算,一般模板,例题及详解

Wmiracle的博客 1万+

牛客编程巅峰赛:牛牛算题(整数分块

链接:https://ac.nowcoder.com/acm/contest/9005/C 来源:牛客网 题目描述 牛牛的数学老师教会了牛牛除法,牛牛十分开心,他知道任意一个正整数都可以表示为n=p×k+mn = p\times k + mn=p×k+m(kkk为商,mmm为余数) 的方式,现在死脑筋的牛牛想要计算对于小于等于nnn的每一个数p(p≥1)p(p\geq 1)p(p≥1), 计算所有k×mk \times mk×m的和。这可难倒了牛牛,请你来帮帮他吧。(由于答案可能过大,请对1...

信仰.的博客 668

数论——整数分块

整数分块一、前言二、引理三、证明四、模板代码 一、前言 在计算∑i=1n⌊ni⌋\sum_{i=1}^{n}⌊\frac{n}{i}⌋∑i=1n​⌊in​⌋的时候,枚举的时间复杂度是O(n),当n很大的时候我们是无法接受的,由于[ni][\frac{n}{i}][in​]中有很多重复的区间,所以我们需要一种更高效的算法。 二、引理 ⌊ ⌋为向下取整符号 引理1:任意整数a,b,c有 ⌊abc⌋=⌊⌊ab⌋c⌋⌊\frac{a}{bc}⌋=⌊\frac{⌊\frac{a}{b}⌋}{c}⌋⌊bca​⌋=⌊

Royen_的博客 595

整数分块的简单应用

原文来自(但是我进不去了,就kuai过来转载一下)

qq_39692258的博客 165

莫比乌斯反演&整数分块

目录前言参考资料莫比乌斯反演预备知识:整数分块(感觉就是一个思想)总结莫比乌斯函数μ\muμ(数论函数也可以视作一个数列)总结莫比乌斯反演题目训练 前言 参考资料 peng-ym-莫比乌斯反演 莫比乌斯反演 预备知识:整数分块(感觉就是一个思想) 参考博客:peng-ym-整除分块 总结 一般形式:∑i=1n[n/i]\sum_{i=1}^{n}[n/i]∑i=1n​[n/i] 过程:r=n/(n/l),然后不断枚举l,求得r,[l,r]部分的值是一样的,不必遍历,直接得到长度*数。 复杂度:由

I_have_a_world的博客 422

【模板】整数分块

图片来源 -> 整数分块基础 那些年我用整数分块做过的题 宁波市多校训练(二)· 最大限定倍数(Normal Version) 2020牛客暑期多校训练营(第七场)· H Dividing 板子 for (ll l = 2, r; l <= lim; l = r + 1) { r = n / (n / l); if (r > lim) r = lim; res = (res + ((((r - l + 1) * 2) % mod)

Yubing792289314的博客 712

【机房模拟赛】cut(整数分块

这道题的数据范围其实已经是很大的提示了; 读懂题后,简单的推一下,就能得到一个不等式: 这个不等式吧里面的求和可以直接暴力累加,因为n只有100。 那么最重要的是如何快速枚举n呢?? 这里就要用到数论分块的知识了: 给一个定值x,和一个变量a(1<a<x)那么x除以a向下取整所得的取值最多只有二倍的根号x种取值; 现在,有了这个理论的支撑,我们就能很轻松的做出这道题了: k+sum进...

Zbw_OIer的博客 323

机器人运动控制学习3——动力学

现在正式进入动力学。

weixin_62225554的博客 165
下一篇: 莫比乌斯函数及其反演学习笔记
sunzz3183
博客等级 码龄7年 2粉丝 7原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值