简单介绍一下怎么推整除分块的R,过程不严谨,但是实用。
套路都是设k等于乘除分块的那个式子,让乘除分块里面式子>=k,然后解出i关于k的式子,把k带入(k代表的式子里的i取L),此时i取等于号的值就是R。下面看过程就懂了
-
∑
1
n
⌊
n
i
⌋
\sum_{1}^{n}{\lfloor{\frac n{i}}\rfloor}
1∑n⌊in⌋
然后令右边的i为L。算出来左边的i值就是R了
上取整的整除分块咋搞
2.
∑
1
n
⌈
n
i
⌉
\sum_{1}^{n}{\lceil{\frac n{i}}\rceil}
1∑n⌈in⌉
先转化成下取整,然后跟上面那个一样的套路
3.1.
∑
1
n
⌊
n
a
∗
i
+
b
⌋
\sum_{1}^{n}{\lfloor{\frac n{a*i+b}}\rfloor}
1∑n⌊a∗i+bn⌋
为什么要乘除分块里面的式子>=k呢,可以理解为不下取整肯定比下取整要大或者等于
推导过程比较简略,如果有错误的地方麻烦指出!
模板,具体的r要推导出式子,然后注意r不能超范围。
for(int l=1,r;l<=n;l=r+1)
{
r=get(m-1,l);
r=min(r,n);
int right=((m-1)/l+1)*l;
ans=min(ans,n-l+right-m);
//cout<<l<<' '<<r<<endl;
}