数论分块
一、数论分块
1、可以用于求形如:\(\sum_{i=1}^{n}f(i)g(\left \lfloor \frac{n}{i} \right \rfloor)\) 的和式,时间复杂度为:\(O(\sqrt{n})\) 。
2、引理:
-
\(\forall a,b,c \in Z, \left \lfloor \frac{a}{bc} \right \rfloor = \left \lfloor \frac{\left \lfloor \frac{a}{b} \right \rfloor}{c} \right \rfloor\) 。
-
\(\forall n\in N_{+},|\left\{ \left \lfloor \frac{n}{d} \right \rfloor \ | \ d\in N_{+},d\le n \right \}| \le |2\sqrt{n}|\) ,其中 \(|A|\) 表示集合的元素个数。
-
对于使得 \(\left \lfloor \frac{n}{i} \right \rfloor = \left \lfloor \frac{n}{j} \right \rfloor\) 成立的最大满足 \(i\le j\le n\) 的 \(j\) 的值为 \(\left \lfloor \frac{n}{\left \lfloor \frac{n}{i} \right \rfloor} \right \rfloor\),即为所在块的右端点,左端点就是 \(i\) 。
for (i64 l = 1, r; l <= n; l = r + 1) {
r = n / (n / l);
sum += f[r] - f[l - 1];
}

浙公网安备 33010602011771号