\gcd 是出现在数论而又披着同余的外衣的唯一的函数。

因为关于 \gcd 的东西实际上非常多非常杂,写一个博客记录一下。

而且数论里面基本上是个东西就离不开 \gcd 所以这也是个非常重要的东西。


1.基础计算

常用欧几里得算法计算,也就是我们经常用的 \gcd(a,b) = \gcd(b,a \bmod b)

证明(直接抄OI-Wiki的,只是为了不误人子弟,日常谁无聊证明这个啊):

a=bk+c,显然有 c=a \bmod b。设 d \mid a,~d \mid b,则 c=a-bk, \frac{c}{d}=\frac{a}{d}-\frac{b}{d}k

由右边的式子可知 \frac{c}{d} 为整数,即 d \mid c 所以对于 a,b 的公约数,它也会是 a \bmod b 的公约数。

反过来也需要证明:

d \mid b,\mid (a \bmod b),我们还是可以像之前一样得到以下式子 \frac{a\bmod b}{d}=\frac{a}{d}-\frac{b}{d}k,\frac{a\bmod b}{d}+\frac{b}{d}k=\frac{a}{d}

因为左边式子显然为整数,所以 \frac{a}{d} 也为整数,即 d \mid a,所以 b,a\bmod b 的公约数也是 a,b 的公约数。

既然两式公约数都是相同的,那么最大公约数也会相同。

所以得到式子 \gcd(a,b)=\gcd(b,a\bmod b)

Code

int gcd(int a,int b) {return !b ? a : gcd(b,a % b);}

2.裴蜀定理

\gcd(a, b) = d,则对任意整数 x, y,有 d|(ax + by) 成立

特别地,一定存在 x, y 满足 ax + by = d

等价的表述:不定方程 ax + by = c (a,b,c \in \mathbb{Z})有解的充要条件为 (a, b)|c

推论:a, b 互质等价于 ax + by = 1 有解

证明

显然有 d | a,d | b

根据之前的引理有 d | ax,d | by

d | (ax+by)

对于第二个结论(

若任何一个等于 0 , 则 \gcd(a,b)=a . 这时定理显然成立。

a,b 不等于 0 .

由于 \gcd(a,b)=\gcd(a,-b) ,

不妨设 a,b 都大于 0 , a\geq b,\gcd(a,b)=d .

ax+by=d , 两边同时除以 d , 可得 a_1x+b_1y=1 , 其中 (a_1,b_1)=1 .

转证 a_1x+b_1y=1 .

我们先回顾一下辗转相除法是怎么做的,由 \gcd(a, b) \rightarrow \gcd(b,a\bmod b) \rightarrow ... 我们把模出来的数据叫做 r 于是,有

\gcd(a_1,b_1)=\gcd(b_1,r_1)=\gcd(r_1,r_2)=\cdots=(r_{n-1},r_n)=1

把辗转相除法中的运算展开,做成带余数的除法,得

\begin{aligned} a_1 &= q_1b+r_1 &(0\leq r_1<b_1) \\ b_1 &= q_2r_1+r_2 &(0\leq r_2<r_1) \\ r_1 &= q_3r_2+r_3 &(0\leq r_3<r_2) \\ &\cdots \\ r_{n-3} &= q_{n-1}r_{n-2}+r_{n-1} \\ r_{n-2} &= q_nr_{n-1}+r_n \\ r_{n-1} &= q_{n+1}r_n \end{aligned}

不妨令辗转相除法在除到互质的时候退出则 r_n=1 所以有( q 被换成了 x ,为了符合最终形式)

r_{n-2}=x_nr_{n-1}+1

1=r_{n-2}-x_nr_{n-1}

由倒数第三个式子 r_{n-1}=r_{n-3}-x_{n-1}r_{n-2} 代入上式,得

1=(1+x_nx_{n-1})r_{n-2}-x_nr_{n-3}

然后用同样的办法用它上面的等式逐个地消去 r_{n-2},\cdots,r_1 ,

可证得 1=a_1x+b_1y . 这样等于是一般式中 d=1 的情况。

3.Exgcd

重头戏,也是写这篇博客的原因之一

由裴蜀定理可得,方程 ax + by = \gcd(a,b) 必有一组解。

所以我们考虑如何求出这样的方程的一组解。

证明:

\begin{aligned} &ax_1 + by_1 = \gcd(a,b) \\ &bx_2 + (a \bmod b)y_2 = \gcd(b,a \bmod b) \end{aligned}

\begin{aligned} &\because \gcd(a,b) = \gcd(b,a \bmod b)\\ &\therefore ax_1 + by_1 = bx_2 + (a \bmod b)y_2 \\ &\because (a \bmod b ) = a - (\lfloor \frac{a}{b} \rfloor \times b)\\ &\therefore ax_1 + by_1 = bx_2 + (a-\lfloor \frac{a}{b} \rfloor \times b) y_2 \\ \end{aligned}

展开得

\begin{aligned} &ax_1 + by_1 = ay_2 + bx_2 - \lfloor \frac{a}{b} \rfloor by_2 = &ay_2 + b(x_2 - \lfloor \frac{a}{b} \rfloor y_2)\\ &\because a = a,b = b \\ &\therefore x_1 = y_2 , y_1 = x_2 - \lfloor \frac{a}{b} \rfloor y_2 \end{aligned}

所以就可以递归求解了。

Code

ll exgcd(ll a,ll b,ll& x,ll& y) {
    ll ret,tmp;
    if (!b) {
        x = 1,y = 0;
        return a;
    }
    ret = exgcd(b,a%b,x,y);
    tmp = x,x = y,y = tmp -a/b * y;
    return ret; 
}

拓展

考虑形如 ax + by = c (a,b,c \in \mathbb{Z}) 的方程的所有解

首先由裴蜀定理得,不定方程 ax + by = c (a,b,c \in \mathbb{Z})有解的充要条件为 (a, b)|c

先考虑求一组特殊解的情况:首先将 a,b,c 都除以 \gcd(a,b)a_0x + b_0y = c_0

此时 \gcd(a_0,b_0) = 1,所以我们可以求出 a_0x + b_0y = 1 的一组解 x_0,y_0 ,则原方程的一组特解为

x_1 = \frac{x_0c}{\gcd(a,b)},y_1 = \frac{y_0c}{\gcd (a,b)}

然后我们考虑构造所有解的形式:

设有 d (d \in \mathbb{Q}) 那么必有 a(x_1 + db) + b(y_1 - da) = c

同时,这组解需要保证 db,da \in \mathbb{Z}

令当 d 取到最小可能的正值的 d_x = db,d_y = da ,那么任意解中这两个变量与 x_1,x_2 的偏差一定分别是 d_x,d_y 的倍数。

显然,最小的时候 d_x = \frac{b}{\gcd (a,b)},d_y = \frac{-a}{\gcd (a,b)}

所有解就是 x = x_0 + kd_x,y = y_0 + kd_y (k \in \mathbb{Z})

例题:P5656 【模板】二元一次不定方程 (exgcd)


4.\varphi(n)

欧拉函数 \varphi(n),表示 1 \sim n-1 里和 n 互质的数的个数。

性质

它有以下重要性质:

性质1:当 x \perp y 时, \varphi(xy) = \varphi(x) \varphi(y)

证明:对于每个 z \nmid xy,必有 z = ab,其中 a\nmid x,b\nmid y。所以就比较显然了。

性质2:当 p 为素数,\varphi(p^k) = p^k - p^{k-1}

证明:考虑每个 x | p^kx = ap。这样的 a1 \sim p^k - 1 里面有 p^{k-1} - 1 个,所以易得。

性质3: