類歐幾里得演算法

2022-10-08 17:54:16 字數 3490 閱讀 1087

\[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...