整除分块笔记

经典问题:求

i=1nmi\large \sum\limits_{i=1}^{n} \left\lfloor\dfrac{m}{i}\right\rfloor

关键在于这个向下取整。以下是 n=m=20n=m=20 时的情况:

i1234567891011121314151617181920mi2010654322221111111111\begin{vmatrix} i & 1 &2&3&4&5&6&7&8&9&10&11&12&13&14&15&16&17&18&19&20 \\ \left\lfloor\dfrac{m}{i}\right\rfloor& 20&10&6&5&4&3&2&2&2&2&1&1&1&1&1&1&1&1&1&1\end{vmatrix}

观察一下可以发现,有重复的 1,21,2 出现。若我们可以将 mi\left\lfloor\dfrac{m}{i}\right\rfloor 值相同的 ii 在一次统计完,就可以缩短时间。

容易得到的是第一段的开头,即 i=1i=1。那么如何计算结尾呢?因为在一段中,mi\left\lfloor\dfrac{m}{i}\right\rfloor 相同,所以我们可以算出 m1=m\left\lfloor\dfrac{m}{1}\right\rfloor=m。问题被转换成为,找到最大的正整数 ii 使 mi=m\left\lfloor\dfrac{m}{i}\right\rfloor = m。那么要有 immim\leq m(反证法)。

所以 i=mm=1i=\left\lfloor\dfrac{m}{m}\right\rfloor=1

形式化地,当一段的 ll 确定,那么该段的值为 t=mlt=\left\lfloor\dfrac{m}{l}\right\rfloor。那么 rtmrt\leq m,所以得:

r=mt=mmlr=\left\lfloor\dfrac{m}{t}\right\rfloor=\left\lfloor\dfrac{m}{\left\lfloor\dfrac{m}{l}\right\rfloor}\right\rfloor
posted @ 2023-12-11 13:50  cjrqwq  阅读(5)  评论(0)    收藏  举报  来源