什么是整除分块
通俗的讲,是一种能用 $O(\sqrt{n})$ 的时间复杂度解决一些含有 $\left \lfloor \frac{n}{i} \right \rfloor $ 的式子(下取整)
整除分块的原理
如图,当 $x >4$时,我们发现它是连续的,于是我们可以尝试找出块长的规律,即可连续计算。
至于规律嘛:(摘自这里)
数论分块结论
对于常数 $n$ ,使得式子 $ \frac{n}{i}=\frac{n}{j}$
成立的最大的满足 $i\leq j \leq n $ 的 $j$ 的值为$\left \lfloor \frac{n}{\left \lfloor \frac{n}{i} \right \rfloor } \right \rfloor $。即值 所在的块的右端点为 $\left \lfloor \frac{n}{\left \lfloor \frac{n}{i} \right \rfloor } \right \rfloor $
我也不知道为什么这是怎么搞出来的,人类智慧是无穷的
代码大概是这样:
1 | while(l<=n){ |
例题
UVA11526
板子。
P2261
结束。