設
\[f(a, b, c, n) = \sum_^n \left\lfloor\frac\right\rfloor
\]其中 \(a, b, c, n\) 是常數,需要 \(\mathcal o(\log n)\) 的做法。
若 \(a \geq c\) 或 \(b \geq c\),我們可以將 \(a, b\) 對 \(c\) 取模以簡化問題。
考慮到\[x = \left \lfloor \frac\right \rfloor c + x \bmod c\]故
\[\begin
f(a, b, c, n) &= \sum_^n \left\lfloor\frac\right\rfloor \\
&= \sum_^n \left\lfloor\frac\right \rfloor c + a \bmod c)i + (\left \lfloor \frac\right \rfloor c + b \bmod c)}\right\rfloor \\
&= \frac \left \lfloor \frac\right \rfloor + n \left \lfloor \frac\right \rfloor + f(a \bmod c , b\bmod c, c, n)
\end
\]此時一定有 \(a < c\) 且 \(b < c\)。
令\[s(i)=\right\rfloor} - 1
\]再進行轉化
\[\begin
\sum_^n \left\lfloor\frac\right\rfloor
&= \sum_^n \sum_^ 1 \\
&= \sum_^ \sum_^n \left[ j \leq s(i) \right]
\end
\]考慮到
\[\begin
j \leq s(i) &\iff j + 1 \leq \right\rfloor} \\
j + 1 \leq \right\rfloor} &\iff j + 1 \leq \frac \\
j + 1 \leq \frac &\iff jc + c \leq ai + b \\
jc + c \leq ai + b &\iff jc + c - b \leq ai \\
jc + c - b \leq ai &\iff jc + c - b - 1 < ai \\
jc + c - b - 1 < ai &\iff \left \lfloor \frac \right \rfloor < i
\end\]故
\[\begin
\sum_^ \sum_^n \left[ j \leq s(i) \right]
&= \sum_^ \sum_^n \left[ i > \left \lfloor \frac \right \rfloor\right] \\
&= \sum_^ \left(n - \left \lfloor \frac \right \rfloor \right) \\
&= (s(n) + 1)n - \sum_^ \left \lfloor \frac \right \rfloor \\
&= (s(n) + 1)n - f(c, c - b - 1, a, s(n))
\end \]故
\[f(a, b, c, n) = (s(n) + 1)n - f(c, c - b - 1, a, s(n))
\]可以發現,上述式子是乙個遞迴式,我們不斷重複上述過程,先取模,後遞迴,其實就是輾轉相除的過程,時間複雜度 \(\mathcal o(\log n)\)。
我們再來推導兩個變種求和式
\[g(a, b, c, n) = \sum_^n i\left\lfloor\frac\right\rfloor \\
h(a, b, c, n) = \sum_^n \left\lfloor\frac\right\rfloor^2
\]引理 1.
\[\sum_^n i^2 = \frac
\]證明如下:
考慮到\[(n+1)^3=n^3+3n^2+3n+1\]故
\[\begin
(n+1)^3-n^3 &= 3n^2+3n+1 \\
n^3-(n-1)^3 &=3(n-1)^2+3(n-1)+1 \\
&\cdots \\
2^3 - 1^3&=3 \times (2-1)^2+3 \times(2-1) + 1 \\
\end
\]將這 \(n\) 個等式左右兩邊相加,得到
\[(n+1)^3 - 1 = 3(1^2 + 2^2 + \cdots n^2) + 3(1 + 2 + \cdots n) + n\]即
\[n^3+3n^2+3n = 3(1^2 + 2^2 + \cdots n^2) + 3\frac + n
\]整理後得
\[\sum_^n i^2 = \frac
\]首先和 \(f\) 一樣,對其取模(根據引理 1. 可將其展開)。
\[\begin
g(a, b, c, n) &= \sum_^n i\left\lfloor\frac\right\rfloor \\
&= \sum_^n i\left\lfloor\frac\right \rfloor c + a \bmod c)i + (\left \lfloor \frac\right \rfloor c + b \bmod c)}\right\rfloor \\
&= \frac \left \lfloor \frac\right \rfloor + \frac \left \lfloor \frac\right \rfloor + g(a \bmod c , b\bmod c, c, n)
\end
\]其他部分推導與 \(f\) 類似,有
\[\begin
g(a, b, c, n) &= \sum_^ \sum_^n i\left[ j \leq s(i) \right] \\
&= \sum_^ \sum_^n i\left[ i > \left \lfloor \frac \right \rfloor\right] \\
\end \]令
\[t =\left \lfloor \frac \right \rfloor
\]則有
\[\begin
g(a, b, c, n)
&= \sum_^ \left((t + 1) + (t + 2) + \cdots + n\right) \\
&= \sum_^ \left(\frac\right) \\
&= \frac\left[ (s(n) + 1) n(n+1) - \sum_^t^2 - \sum_^t\right] \\
&= \frac \left[(s(n) + 1) n(n+1) - h(c, c - b - 1, a, s(n)) - f(c, c - b - 1, a, s(n))\right]
\end
\]咕咕咕。
同樣套路,先取模
\[h(a, b, c, n) =
\]luogu5170
oi-wiki
類歐幾里得演算法
比較快速地算出下面的式子 f n,a,b,c,k 1,k 2 sum limits n x lfloor frac rfloor 不妨假設現在 a geq c 或 b geq c 那麼 sum limits n x lfloor frac rfloor sum limits n x lfloor f...
類歐幾里得演算法
這個演算法用於求一條直線下整點個數,我們定義 f a,b,c,n sum lfloor frac rfloor 其他幾個乘係數的擴充套件不想學了tat a ge c 或 b ge c 當 a ge c 或 b ge c 時,我們考慮把分子對 c 的商和餘數分別提出來,那麼有 begin f a,b,...
類歐幾里得演算法
對於給定的元 a,b,c,n 設 f i lfloor frac rfloor 求 f a,b,c,n sum 0 nf i g a,b,c,n sum 0 nf i 2 h a,b,c,n sum 0 ni cdot f i lfloor frac rfloor lfloor frac rfloo...