数论分块
根号科技 是个好东西。
数论分块,顾名思义一种数论中的分块,通常处理形如 \(\sum\limits_{i=1}^nf(i)\times\left\lfloor\dfrac{k}{i}\right\rfloor\) 的和式。
对于形如 \(\sum\limits_{i=1}^k\left\lfloor\dfrac{n}{i}\right\rfloor\) 的式子,容易发现如果 \(n<i\),结果为 0,对答案没有任何贡献。所以我们只需统计对于 \(i\in[1,\min(k,n)]\) 的情况即可。方便起见,先讨论对于 \([1,n]\) 的情况。
首先,回想我们求因数个数的代码,枚举 \(i=\overline{1,2,\cdots,\sqrt{n}}\),为什么呢?
对于 \(\forall a,b\in\mathbb{N^* }\wedge ab=n\wedge a\le b\),必定有 \(a\le\sqrt{n}\)(\(a^2\le ab=n\)),所以 \(n\) 最多只有 \(2\sqrt{n}\) 个因数。即 \(\left\lfloor\dfrac{n}{i}\right\rfloor,i=\overline{1,2,\cdots,n}\) 最多只有 \(2\sqrt{n}\) 个取值。