小寄巧:整除分块
事情的起源是这样的:
/被和谐部分/
然后写了这篇博客。
看一道题目:
\(\sum_{i=1}^{i \leq n} \lfloor \frac{n}{i} \rfloor\)
其中 \(1 \le n \le 1e9\)
发现有很多个 \(\lfloor \frac{n}{i} \rfloor\) 是相同的。
我们把相同的东西一起计算。算出相同的值的起点和终点。
然后想想,怎么算出终点。
打个表发现,起点到终点商一定,终点的余数最小,为 \(0\)。那么就是 \(\frac{n}{\frac{n}{l}}\)。
感性理解我不会证,时间复杂度降到了 \(O(\sqrt n)\)。
回到这道题。
\(a_i \le b_i\) 的情况不用管。否则,我们要 \(\lfloor \frac{a_i}{k} \rfloor = \lfloor \frac{b_i}{k} \rfloor\),这兄弟才能靠先手优势补到刀。
然后用整除分块搞出来哪些东西满足条件,用线段树 ++,搞 \(n\) 次,满足条件的 \(k\) 就是 \(n\) 次都满足的。
就是这么个小寄巧,害得我小号被 Hack,没有一飞冲天。淦。