首页 > 其他分享 >数论分块

数论分块

时间:2022-11-30 22:35:16浏览次数:57  
标签:lfloor frac 分块 数论 sum rfloor times

数论分块

数论分块

也叫整除分块

是用于快速处理类似于

\[\sum_{i=1}^n \lceil \frac{n}{i} \rceil \text{或者} \sum_{i=1}^n \lfloor \frac{n}{i} \rfloor \]

式子的一种方法

复杂度:\(O(\sqrt{n})\)

思想阐述:以向下取整为例

对于\(\lfloor \frac{n}{i}\rfloor\),来说,它的值是呈块状递减分布的,至多有\(2\sqrt{n}\)个块

这些块的分布规律是:

对于一个块内的一个点\(l\),我们可以得到块的右端点为\(\lfloor \frac{n}{\lfloor \frac{n}{i} \rfloor} \rfloor\)

写成代码就是

int get(int l){return n/(n/l);}

非常的\(so\)  \(easy\)

那么我们要求的 \(\sum_{i=1}^n \lfloor \frac{n}{i} \rfloor\)

也就迎刃而解了

for(int i=1;i<=n;i++){
   int r=get(i);
   ans+=(n/i)*(r-i+1);
   i=r;
}

还有一个性质:

\[\text{对于}a,b,c\in\mathbb{Z}\text{,有}\lfloor\frac{a}{bc}\rfloor=\left\lfloor\frac{\lfloor\frac{a}{b}\rfloor}{c}\right\rfloor \]

来一道例题吧:

余数之和(CQOI2007)

题意简述:给定\(n,k\)求:

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

注意到\(k \bmod i=k-\lfloor \frac{k}{i} \rfloor \times i\)

所以

\[\sum_{i=1}^n (k\bmod i) = \sum_{i=1}^n \left(k-\lfloor \frac{k}{i} \rfloor \times i\right) = \sum_{i=1}^n k-\sum_{i=1}^n \lfloor \frac{k}{i} \rfloor \times i=n\times k -\sum_{i=1}^n \lfloor \frac{k}{i} \rfloor \times i \]

由于数论分块,我们设\(\sum_{i=1}^n \lfloor \frac{k}{i} \rfloor\)分成了\(m\)个块,各个块的左右端点记作\(L_i,R_i(i\in [1,m])\)

则原式子可化为:

\[\sum_{i=1}^m \sum_{j=L_i}^{R_i} (\lfloor \frac{k}{L_i} \rfloor \times j)=\sum_{i=1}^m\left(\lfloor \frac{k}{L_i} \rfloor \times \sum _ {j=L_i}^{R_i} j\right) = \sum_{i=1}^m\left(\lfloor \frac{k}{L_i} \rfloor \times \frac{(L_i+R_i)(R_i-L_i+1)}{2} \right) \]

综上所述,答案即为:

\[n\times k - \sum_{i=1}^m\left(\lfloor \frac{k}{L_i} \rfloor \times \frac{(L_i+R_i)(R_i-L_i+1)}{2} \right) \]

\(Code:\)

cin>>n>>k;
ans=n*k;
for(int x=1,gx;x<=n;x=gx+1){
    gx=k/x?min(k/(k/x),n):n;
    ans-=(k/x)*(x+gx)*(gx-x+1)/2;
}
cout<<ans;

标签:lfloor,frac,分块,数论,sum,rfloor,times
From: https://www.cnblogs.com/oierpyt/p/16939974.html

相关文章

  • 【数论】约数
    文章目录​​一、试除法求n的所有约数​​​​二、约数个数​​​​三、约数之和​​​​四、最大公约数(欧几里得算法/辗转相除法)​​一、试除法求n的所有约数vector<int>g......
  • 2021 陕西省赛 C - GCD // 整除分块
    题目来源:2021年ICPC国际大学生程序设计竞赛暨陕西省第九届大学生程序设计竞赛题目链接:https://ac.nowcoder.com/acm/contest/35232/C题意给定三个整数\(l\)、\(r\)、\(......
  • 关于基础数论之同余定理
    数论中的重要概念。给定一个正整数m,如果两个整数a和b满足a-b能够被m整除,即(a-b)/m得到一个整数,那么就称整数a与b对模m同余,记作a≡b(modm)。对模m同余是整数的一个等价关......
  • 分块快速入门
    基本思想有一句老话,叫“大段维护,局部朴素”。其实就是将一些东西人为的分为若干块,然后每个块整体的维护一些东西,小范围内直接暴力做,做到时空平衡。其实和根号分治有点像......
  • 【UOJ771】【UER11】科考工作(数论,构造)
    题意:给定质数\(p\)和\(2p-1\)个数\(a_1,\cdots,a_{2p-1}\),从中选出\(p\)个数使得它们模\(p\)意义下的和为\(0\),要求给出构造。\(p\leq3\times10^5\)。题解:......
  • 数论分块
    数论分块对于含有除法向下取整的式子,可以使用数论分块,将\(\left\lfloor\frac{n}{i}\right\rfloor\)相同的数统一计算。使式子\(\left\lfloor\frac{n}{i}\right......
  • LOJ数列分块入门九题(中)
    #6281.数列分块入门5-题目-LibreOJ(loj.ac)区间开方,区间求和题。显然,针对区间维护开方操作很难做到,于是考虑其值的性质,显然,int范围内的值最多开方6次就会变为1,之......
  • POJ 1845Sumdiv(数论)
    SumdivTimeLimit:1000MS MemoryLimit:30000KTotalSubmissions:20041 Accepted:5060DescriptionConsidertwonaturalnumbersAandB.LetSbethesumof......
  • LOJ数列分块入门九题(上)
    一转眼,已经有整整一年没有在博客园写博客了。Howtimeflys.最近突然想起其实我不太擅长分块算法,又想起去年暑假有位同学同我提起过LOJ的数列九题,说来惭愧,打了这么久题今......
  • 势能分块模板
    分块:把n分成sqrt(n)块,中间整体修改,2边暴力修改即可,修改,查询的复杂度为3sqr(n);比线段树好写一些?当然整体的修改的时候,有时候要用lz去处理, 和势能线段树......