模型:
\(\sum_{i=1}^{n}\left\lfloor\frac{n}{i}\right\rfloor\)
假設 \(n = 8\),那么可得:
\(i\) | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|---|---|---|---|---|---|---|---|
\(8/i\) | 8 | 4 | 2 | 2 | 1 | 1 | 1 | 1 |
概念:
表中同樣的值會連續出現,而相同的值所划分的區間成為一個塊。
整除的性質使得從 \(1\) 到 \(n\) 的表可根據數值划分為不同的塊,且分塊數遠遠小於 \(n\)。
利用這種性質,我們可以推導出每個分塊具體的左右端點位置在哪,這樣就可以快速求解出來了。
推導:
假設我們已知某一個分塊的左端點 \(l\),要求解出該分塊的右端點 \(r\)。
設該分塊的數值為\(k\),對於該分塊中的每個數\(i\),有 \(k=\left\lfloor\frac{n}{i}\right\rfloor=\left\lfloor\frac{n}{l}\right]\),即 \(i\times k \le n\)。
那么顯然滿足 \(i \times k \le n\) 成立的最大的 \(i\) 就是我們要的右端點 \(r\)。
於是可得:\(\left\{\begin{array}{l}k=\left\lfloor\frac{n}{l}\right\rfloor \\ r=\max (i), i \times k \leq n\end{array}\right.\)
推導得:\(r=\left\lfloor\frac{n}{k}\right\rfloor=\left\lfloor \frac{n}{\left\lfloor\frac{n}{l}\right\rfloor}\right\rfloor\)
變形0:
已知 \(n,m\),求 \(\sum_{i=1}^{min(n,m)}\lfloor\frac{n}{ i}\rfloor\lfloor\frac{m}{i}\rfloor\)
\(\left\{\begin{array}{l}k1=\left\lfloor\frac{n}{l}\right\rfloor,k2= \left\lfloor\frac{m}{l}\right\rfloor\\ r=\max (i), i \times k1 \leq n,i\times k2 \le m\end{array}\right.\)
\(r = min(\lfloor\frac{n}{k1}\rfloor,\lfloor\frac{m}{k2}\rfloor)\)
變形1:
已知 \(n,a,b\),求 \(\sum_{i=1}^{n}\left\lfloor\frac{n}{a i+b}\right\rfloor\)
令 \(i' = a\times i + b\),先求出 \(\left\lfloor\frac{n}{i'}\right\rfloor\) 的整除分塊
可得 \(k=\left\lfloor\frac{n}{a\times l+b}\right\rfloor\),\(r'=\left\lfloor\frac{n}{k}\right\rfloor=\left\lfloor\frac{n}{\left\lfloor\frac{n}{a \times l + b}\right\rfloor}\right\rfloor\)
\(\left\{\begin{array}{l}i'=a\times i +b \\ r'=\max (i')\end{array}\right.\)→\(\begin{cases}a\times i=i'-b\\ i=\dfrac{i'-b}{a}\end{cases}\)→ \(r=max(i)= max(\left\lfloor\frac{i'-b}{a}\right\rfloor) = \lfloor\frac{r'-b}{a} \rfloor\)
$r =\left \lfloor \dfrac{\left \lfloor \dfrac{n}{\lfloor \dfrac{n}{a\times l+b}\rfloor }\right \rfloor -b}{a}\right \rfloor $
變形2:
做法同上。
已知 \(n\),求 \(\sum_{i=1}^{n}\left\lfloor\frac{n}{i^2}\right\rfloor\)
令 \(i' = i^2\),先求出 \(\left\lfloor\frac{n}{i'}\right\rfloor\) 的整除分塊
可得 \(k=\left\lfloor\frac{n}{l^2}\right\rfloor\),\(r'=\left\lfloor\frac{n}{k}\right\rfloor=\left\lfloor\frac{n}{\left\lfloor\frac{n}{l^2}\right\rfloor}\right\rfloor\)
\(\left\{\begin{array}{l}i=\sqrt{i'} \\ r'=\max (i')\end{array}\right.\) → \(r = max(i) = max(\lfloor\sqrt{i'} \rfloor) = \lfloor r' \rfloor = \lfloor\sqrt{\left\lfloor\frac{n}{\left\lfloor\frac{n}{l^2}\right\rfloor}\right\rfloor}\rfloor\)
變形3:
已知 \(n\),求 \(\sum_{i=1}^{n}\left\lceil\frac{n}{i}\right\rceil\)
當 \(n\) 整除 \(i\) 時,\(\left\lceil\frac{n}{i}\right\rceil = \left\lfloor\frac{n}{i}\right\rfloor\)
當 \(n\) 不整除 \(i\) 時,\(\left\lceil\frac{n}{i}\right\rceil = \left\lfloor\frac{n}{i}\right\rfloor + 1\)
於是我們可以用 $\lfloor \frac{n+i-1}{i}\rfloor $ 來代替 \(\lceil\frac{n}{i}\rceil\)
原式就轉換為了 \(\sum_{i=1}^{n}\lfloor\frac{n+i -1}{i}\rfloor\)
那么有 \(\left\{\begin{array}{l}k=\left\lfloor\frac{n+l-1}{l}\right\rfloor \\ r=\max (i), i\times k \leq n+i-1 \end{array}\right.\)
\(\because i \times k \le n+i-1 \Rightarrow i\times(k-1) \le n-1\)
\(\therefore r=\left\lfloor\frac{n-1}{k-1}\right\rfloor=\left[\frac{n-1}{\left\lfloor\frac{n+l-1}{l} \mid-1\right.}\right\rfloor\)