各类欧几里得算法

注意:本博客公式较多,字体小,建议放大观看。

辗转相除法

更相减损术

\[\gcd(a,b)=\gcd(a-b,b) \]

欧几里得算法

\[\gcd(a,b)=\gcd(b,a\bmod b) \]

注意到当 \(a>b\)\(a\bmod b<\frac{1}{2}a\),所以至多递归 \(O(\log a)\) 层。

扩展欧几里得算法

求不定方程 \(ax+by=m\) 的一组整数解。

sol:

该方程有解当且仅当 \(\gcd(a,b)\mid m\),下面假设 \(d=\gcd(a,b)\),则原方程可化为 \(ax+by=d\)

设:

\[ax+by=\gcd(a, b) \]

\[bx_1+(a\bmod b)y_1=\gcd(b,a\bmod b) \]

假设我们已经求出 \(x_1\)\(y_1\),考虑得到 \(x\)\(y\)

由欧几里得定理可知:\(\gcd(a,b)=\gcd(b,a\bmod b)\)

所以:\(ax+by=bx_1+(a\bmod b)y_1\)

又因为:

\[a\bmod b=a-\left\lfloor\frac{a}{b}\right\rfloor\times b \]

所以:

\[ax+by=bx_1+\left(a-\left\lfloor\frac{a}{b}\right\rfloor\times b\right)y_1 \]

整理得:

\[ax+by=ay_1+b\left(x_1−\left\lfloor\frac{a}{b}\right\rfloor y_1\right) \]

对比两侧系数即得到:

\[x=y_1,y=x_1−\left\lfloor\frac{a}{b}\right\rfloor y_1 \]

递归调用即可,边界是 \(b=0\) 时,此时取 \(x=1,y=0\)

类欧几里得算法

给定 \(n,a,b,c\),分别求:

\[\sum\limits_{i=0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor,\sum\limits_{i=0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor^2,\sum\limits_{i=0}^ni\left\lfloor\frac{ai+b}{c}\right\rfloor \]

sol:

\(f(a,b,c,n)=\sum\limits_{i=0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor\),考虑 \(a,b,c\) 的关系。

  • \(a\ge c\)\(b\ge c\),则把 \(a,b\)\(c\) 取模:
    \(\begin{aligned}f(a,b,c,n)&=\sum\limits_{i=0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor\\&=\sum\limits_{i=0}^n\left\lfloor\frac{(\left\lfloor\frac{a}{c}\right\rfloor c+a\bmod c)i+(\left\lfloor\frac{b}{c}\right\rfloor c+b\bmod c)}{c}\right\rfloor\\&=\frac{n(n+1)}{2}\left\lfloor\frac{a}{c}\right\rfloor+(n+1)\left\lfloor\frac{b}{c}\right\rfloor+\sum\limits_{i=0}^n\left\lfloor\frac{(a\bmod c)i+(b\bmod c)}{c}\right\rfloor\\&=\frac{n(n+1)}{2}\left\lfloor\frac{a}{c}\right\rfloor+(n+1)\left\lfloor\frac{b}{c}\right\rfloor+f(a\bmod c,b\bmod c,c,n)\end{aligned}\)

  • \(a<c\)\(b<c\)
    \(\begin{aligned}f(a,b,c,n)&=\sum\limits_{i=0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor\\&=\sum\limits_{i=0}^n\sum\limits_{j=0}^{\left\lfloor\frac{ai+b}{c}\right\rfloor-1}1\\&=\sum\limits_{j=0}^{\left\lfloor\frac{an+b}{c}\right\rfloor-1}\sum\limits_{i=0}^n\left[j<\left\lfloor\frac{ai+b}{c}\right\rfloor\right]\end{aligned}\)
    \(j<\left\lfloor\frac{ai+b}{c}\right\rfloor\) 这个条件转化一下:
    \(\begin{aligned}j<\left\lfloor\frac{ai+b}{c}\right\rfloor&\Longleftrightarrow j+1\le\left\lfloor\frac{ai+b}{c}\right\rfloor\\&\Longleftrightarrow j+1\le\frac{ai+b}{c}\\&\Longleftrightarrow jc+c-b-1<ai\\&\Longleftrightarrow\left\lfloor\frac{jc+c-b-1}{a}\right\rfloor<i\end{aligned}\)
    \(m=\left\lfloor\frac{an+b}{c}\right\rfloor\),那么原式化为:
    \(\begin{aligned}\sum\limits_{j=0}^{m-1}\sum\limits_{i=0}^n\left[j<\left\lfloor\frac{ai+b}{c}\right\rfloor\right]&=\sum\limits_{j=0}^{m-1}\sum\limits_{i=0}^n\left[i>\left\lfloor\frac{jc+c-b-1}{a}\right\rfloor\right]\\&=\sum\limits_{j=0}^{m-1}\left(n-\left\lfloor\frac{jc+c-b-1}{a}\right\rfloor\right)\\&=nm-f(c,c-b-1,a,m-1)\end{aligned}\)

两种情况递归即可,复杂度同欧几里得算法,为 \(O(\log n)\)

现在,我们还需要求:\(g(a,b,c,n)=\sum\limits_{i=0}^ni\left\lfloor\frac{ai+b}{c}\right\rfloor\)\(h(a,b,c,n)=\sum\limits_{i=0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor^2\)

先求 \(g\),同样分两种情况。

  • \(a\ge c\)\(b\ge c\)
    \(f\) 类似,推导出 \(g(a,b,c,n)=\frac{n(n+1)(2n+1)}{2}\left\lfloor\frac{a}{c}\right\rfloor+\frac{n(n+1)}{2}\left\lfloor\frac{b}{c}\right\rfloor+g(a\bmod c,b\bmod c,c,n)\)

  • \(a<c\)\(b<c\)
    \(\begin{aligned}g(a,b,c,n)&=\sum\limits_{i=0}^ni\left\lfloor\frac{ai+b}{c}\right\rfloor\\&=\sum\limits_{j=0}^{m-1}\sum\limits_{i=0}^ni\left[j<\left\lfloor\frac{ai+b}{c}\right\rfloor\right]\end{aligned}\)
    方便起见,设 \(t=\left\lfloor\frac{jc+c-b-1}{a}\right\rfloor\),则:
    \(\begin{aligned}g(a,b,c,n)&=\sum\limits_{j=0}^{m-1}\sum\limits_{i=0}^ni[i>t]\\&=\sum\limits_{j=0}^{m-1}\frac{1}{2}(t+n+1)(n-t)\\&=\frac{1}{2}\left[mn(n+1)-\sum\limits_{j=0}^{m-1}t^2-\sum\limits_{j=0}^{m-1}t\right]\\&=\frac{1}{2}\left[m n(n+1)-h(c,c-b-1,a,m-1)-f(c,c-b-1,a,m-1)\right]\end{aligned}\)

再求 \(h\),也是最复杂的一个:

  • \(a\ge c\)\(b\ge c\)
    \(\begin{aligned}h(a,b,c,n)&=\sum\limits_{i=0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor^2\\&=\sum\limits_{i=0}^n\left(\left\lfloor\frac{a}{c}\right\rfloor i+\left\lfloor\frac{b}{c}\right\rfloor+\left\lfloor\frac{(a\bmod c)i+b\bmod c}{c}\right\rfloor\right)^2\\&=\frac{n(n+1)(2n+1)}{6}\left\lfloor \frac{a}{c}\right\rfloor^2+(n+1)\left\lfloor \frac{b}{c}\right\rfloor^2+n(n+1)\left\lfloor \frac{a}{c}\right\rfloor\left\lfloor \frac{b}{c}\right\rfloor\\&\ \ \ \ +2\left\lfloor \frac{a}{c}\right\rfloor g(a\bmod c,b\bmod c,c,n)+2\left\lfloor \frac{b}{c}\right\rfloor f(a\bmod c,b\bmod c,c,n)\\&\ \ \ \ +h(a\bmod c,b\bmod c,c,n)\end{aligned}\)
  • \(a<c\)\(b<c\)
    同样地,令 \(m=\left\lfloor\frac{an+b}{c}\right\rfloor,t=\left\lfloor\frac{jc+c-b-1}{a}\right\rfloor\)
    \(n^2\) 写成 \(\left(2\sum\limits_{i=1}^ni\right)-n\),则:
    \(\begin{aligned}h(a,b,c,n)&=\sum\limits_{i=0}^n\left\lfloor\frac{ai+b}{c}\right\rfloor^2\\&=\sum\limits_{i=0}^n\left(\left(2\sum\limits_{j=1}^{\left\lfloor\frac{ai+b}{c}\right\rfloor}j\right)-\left\lfloor\frac{ai+b}{c}\right\rfloor\right)\\&=\left(2\sum\limits_{i=0}^n\sum\limits_{j=0}^{\left\lfloor\frac{ai+b}{c}\right\rfloor-1}j+1\right)-f(a,b,c,n)\\&=\left(2\sum\limits_{j=0}^{m-1}\sum\limits_{i=0}^n(j+1)\left[j<\left\lfloor\frac{ai+b}{c}\right\rfloor\right]\right)-f(a,b,c,n)\\&=\left(2\sum\limits_{j=0}^{m-1}(j+1)\sum\limits_{i=0}^n[i>t]\right)-f(a,b,c,n)\\&=\left(2\sum\limits_{j=0}^{m-1}(j+1)(n-t)\right)-f(a,b,c,n)\\&=nm(m+1)-2f(c,c-b-1,a,m-1)\\&\ \ \ \ -2g(c,c-b-1,a,m-1)-f(a,b,c,n)\end{aligned}\)

于是 \(f,g,h\) 相互递归调用即可。

posted @ 2025-02-08 17:05  O_v_O  阅读(47)  评论(0)    收藏  举报