最大公约数与最小公倍数
一、定义
1. 最大公约数
设 a1,a2,a3,...,aka_1, a_2, a_3, ... , a_ka1,a2,a3,...,ak 是 kkk 个非 0 整数,如果 ∃d∈Z,d≠0\exist d \in Z, d \neq 0∃d∈Z,d=0 ,使得 d∣a1,d∣a2,d∣a3,...,d∣akd \mid a_1, d \mid a_2, d \mid a_3, ... , d \mid a_kd∣a1,d∣a2,d∣a3,...,d∣ak ,则称 ddd 是 a1,a2,a3,...,aka_1, a_2, a_3, ... , a_ka1,a2,a3,...,ak 的公约数;
公约数中最大的一个称为最大公约数,记为 gcd(a1,a2,a3,...,ak)\gcd(a_1, a_2, a_3, ... , a_k)gcd(a1,a2,a3,...,ak) ,其永远存在,最少为 1 ;
当 gcd=1\gcd = 1gcd=1 时,称这 nnn 个数是互质或互约的,公约数一定是最大公约数的约数;
2. 最小公倍数
设 a1,a2,a3,...,aka_1, a_2, a_3, ... , a_ka1,a2,a3,...,ak 是 kkk 个非 0 整数,如果 ∃d∈Z,d≠0\exist d \in Z, d \neq 0∃d∈Z,d=0 ,使得 a1∣d,a2∣d,a3∣d,...,ak∣da_1 \mid d, a_2 \mid d, a_3 \mid d, ... , a_k \mid da1∣d,a2∣d,a3∣d,...,ak∣d ,则称 ddd 是 a1,a2,a3,...,aka_1, a_2, a_3, ... , a_ka1,a2,a3,...,ak 的公倍数;
公倍数中最下的一个称为最小公倍数,记为 lcm(a1,a2,a3,...,ak)lcm(a_1, a_2, a_3, ... , a_k)lcm(a1,a2,a3,...,ak) ,其永远存在;
公倍数一定是最小公倍数的倍数;
3. 定理
lcm(a,b)∗gcd(a,b)=ablcm(a, b) * \gcd(a, b) = ablcm(a,b)∗gcd(a,b)=ab ;
证明如下,
将 a,ba, ba,b 质因数分解,设 a,ba, ba,b 质因数集合并集为 {P1,P2,...,Pn}\{P_1, P_2, ... , P_n\}{P1,P2,...,Pn} ;
则设 a=P1k1∗P2k2∗...∗Pnkn(0≤ki,ki∈Z),b=P1j1∗P2j2∗...∗Pnjn(0≤ji,ji∈Z)a = P_1^{k_1} * P_2^{k_2} * ... * P_n^{k_n} (0 \leq k_i, k_i \in Z), b = P_1^{j_1} * P_2^{j_2} * ... * P_n^{j_n} (0 \leq j_i, j_i \in Z)a=P1k1∗P2k2∗...∗Pnkn(0≤ki,ki∈Z),b=P1j1∗P2j2∗...∗Pnjn(0≤ji,ji∈Z)
∴gcd(a,b)=P1min(k1,j1)∗P2min(k2,j2)∗P3min(k3,j3)∗...∗Pnmin(kn,jn)\therefore \gcd(a, b) = P_1^{\min(k_1, j_1)} * P_2^{\min(k_2, j_2)} * P_3^{\min(k_3, j_3)} * ... * P_n^{\min(k_n, j_n)}∴gcd(a,b)=P1min(k1,j1)∗P2min(k2,j2)∗P3min(k3,j3)∗...∗Pnmin(kn,jn)
lcm(a,b)=P1max(k1,j1)∗P2max(k2,j2)∗P3max(k3,j3)∗...∗Pnmax(kn,jn)\quad lcm(a, b) = P_1^{\max(k_1, j_1)} * P_2^{\max(k_2, j_2)} * P_3^{\max(k_3, j_3)} * ... * P_n^{\max(k_n, j_n)}lcm(a,b)=P1max(k1,j1)∗P2max(k2,j2)∗P3max(k3,j3)∗...∗Pnmax(kn,jn)
又 ∵min(ki,ji)+max(ki,ji)=ki+ji\because \min(k_i, j_i) + \max(k_i, j_i) = k_i + j_i∵min(ki,ji)+max(ki,ji)=ki+ji
∴gcd(a,b)∗lcm(a,b)=P1k1+j1∗...∗Pnkn+jn=a∗b\therefore \gcd(a, b) * lcm(a, b) = P_1^{k_1 + j_1} * ... * P_n^{k_n + j_n} = a * b∴gcd(a,b)∗lcm(a,b)=P1k1+j1∗...∗Pnkn+jn=a∗b
二、辗转相除法
1. 说明
辗转相除法用于求两个数的最大公约数,又称欧几里得算法,其原理是 gcd(a,b)=gcd(b,a mod b)\gcd(a, b) = \gcd(b, a \; mod \; b)gcd(a,b)=gcd(b,amodb) ;
2. 证明
设 gcd(a,b)=p\gcd(a, b) = pgcd(a,b)=p ,则
a=kp,b=gp,(k,g)=1,k,g∈Za = kp, b = gp, (k, g) = 1, k, g \in Za=kp,b=gp,(k,g)=1,k,g∈Z
由模运算放缩性得,
a mod b=kp mod gp=p(k mod g)a \; mod \; b = kp \; mod \; gp = p(k \; mod \; g)amodb=kpmodgp=p(kmodg)
∴gcd(b,a mod b)=gcd(gp,(k mod g)∗p)\therefore \gcd(b, a \; mod \; b) = \gcd(gp, (k \; mod \; g) * p)∴gcd(b,amodb)=gcd(gp,(kmodg)∗p)
又 ∵(k,g)=1\because (k, g) = 1∵(k,g)=1
∴gcd(b,a mod b)=p\therefore \gcd(b, a \; mod \; b) = p∴gcd(b,amodb)=p
三、扩展欧几里得算法
1. 说明
已知整数 a,ba, ba,b 时,一定 ∃x,y∈Z\exist x, y \in Z∃x,y∈Z 使得 ax+by=gcd(a,b)ax + by = \gcd(a, b)ax+by=gcd(a,b) ;
证明如下,
设 ax1+by1=gcd(a,b),bx2+(a mod b)y2=gcd(b,a mod b)ax_1 + by_1 = \gcd(a, b), bx_2 + (a \; mod \; b)y_2 = \gcd(b, a \; mod \; b)ax1+by1=gcd(a,b),bx2+(amodb)y2=gcd(b,amodb)
由欧几里得定理可得,gcd(a,b)=gcd(b,a mod b)\gcd(a, b) = \gcd(b, a \; mod \; b)gcd(a,b)=gcd(b,amodb)
∴ax1+by1=bx2+(a mod b)y2\therefore ax_1 + by_1 = bx_2 + (a \; mod \; b) y2∴ax1+by1=bx2+(amodb)y2
整理得 ax1+by1=ay2+b(x2−⌊ab⌋y2)ax_1 + by_1 = ay_2 + b(x_2 - \lfloor\frac{a}{b}\rfloor y_2)ax1+by1=ay2+b(x2−⌊ba⌋y2)
∴∃x1=y2,y1=x2−⌊ab⌋y2\therefore \exist x_1 = y_2, y_1 = x_2 - \lfloor\frac{a}{b}\rfloor y_2∴∃x1=y2,y1=x2−⌊ba⌋y2
则 x1,y1x_1, y_1x1,y1 这组解由 x2,y2x_2, y_2x2,y2 得来,
当 xn,ynx_n, y_nxn,yn 关于 gcd(a,0)\gcd(a, 0)gcd(a,0) 时,有
axn+byn=gcd(a,0)=aax_n + by_n = \gcd(a, 0) = aaxn+byn=gcd(a,0)=a
∴xn=1,yn=0\therefore x_n = 1, y_n = 0∴xn=1,yn=0
∴∃xn,yn\therefore \exist x_n, y_n∴∃xn,yn
∴∃x,y\therefore \exist x, y∴∃x,y
2. 代码
思路
则模拟每次证明的思路进行辗转相除后更新 x,yx, yx,y 即可;
代码
int ex_gcd(int a, int b, int &x, int &y) {
int tot1, tot2;
if (!b) {
x = 1, y = 0;
return a;
}
tot1 = ex_gcd(b, a % b, x, y);
tot2 = x;
x = y;
y = tot2 - a / b * y;
return tot1;
}
四、裴蜀定理
1. 定理
对于不定方程 ax+by=max + by = max+by=m ,其有解的充要条件为 gcd(a,b)∣m\gcd(a, b) \mid mgcd(a,b)∣m ;
证明如下,
-
必要性,即 ax+by=max + by = max+by=m 有解,可得 gcd(a,b)∣m\gcd(a, b) \mid mgcd(a,b)∣m ;
∵ax+by=m\because ax + by = m∵ax+by=m 有解
∴∃x,y∈Z\therefore \exist x, y \in Z∴∃x,y∈Z 使得 ax+by=max + by = max+by=m
又 ∵gcd∣a,gcd∣b\because \gcd \mid a, gcd \mid b∵gcd∣a,gcd∣b
∴gcd(a,b)∣ax+by\therefore gcd(a, b) \mid ax + by∴gcd(a,b)∣ax+by
∴gcd(a,b)∣m\therefore gcd(a, b) \mid m∴gcd(a,b)∣m
-
充分性,即 gcd(a,b)∣mgcd(a, b) \mid mgcd(a,b)∣m ,可得 ax+by=max + by = max+by=m 有解;
由扩展欧拉定理得, ax+by=gcd(a,b)ax + by = \gcd(a, b)ax+by=gcd(a,b) 一定有解
又 ∵gcd(a,b)∣m\because gcd(a, b) \mid m∵gcd(a,b)∣m
∴ax+by=m\therefore ax + by = m∴ax+by=m 有解
2. 引理1
若 a,b∈Z+a, b \in Z^+a,b∈Z+ ,且 (a,b)=1(a, b) = 1(a,b)=1 ,则 ∄k<b∈Z+\not\exist k < b \in Z^+∃k<b∈Z+ ,使得 b∣kab \mid kab∣ka ;
使用反证法,证明如下,
若 ∃0<k<b∈Z\exist 0 < k < b \in Z∃0<k<b∈Z ,使得 b∣kab \mid kab∣ka ,则 kakaka 中一定包含 bbb 的所有质因子
又 ∵(a,b)=1\because (a, b) = 1∵(a,b)=1
∴a\therefore a∴a 中不可能包含 bbb 的质因子
∴k\therefore k∴k 定为 bbb 的倍数
与 0<k<b0 < k < b0<k<b 矛盾,假设不成立;
3. 推论
若 a,b∈Z+a, b \in Z^+a,b∈Z+ 且 (a,b)=1(a, b) = 1(a,b)=1 ,则 0,a,2a,3a,...,(b−1)a0, a, 2a, 3a, ... , (b - 1)a0,a,2a,3a,...,(b−1)a 分别 mod bmod \; bmodb 的余数互不相等;
证明使用反证法,如下,
如果存在 ia,ja,(0<j<i<b)ia, ja, (0 < j < i < b)ia,ja,(0<j<i<b) ,使得它们分别 mod bmod \; bmodb 的余数相等,则 (i−j)∗a mod b==0(i - j) * a \; mod \; b == 0(i−j)∗amodb==0 且 0<i−j<b0 < i - j < b0<i−j<b 与引理 1 矛盾,假设不成立;
4. 引理2
若 (a,b)=1(a, b) = 1(a,b)=1 ,则 ∃k∈Z\exist k \in Z∃k∈Z 使 k∗a mod b=1k * a \; mod \; b = 1k∗amodb=1 ;
证明如下,
根据推论, 0,a,2a,3a,...,(b−1)a0, a, 2a, 3a, ... , (b - 1)a0,a,2a,3a,...,(b−1)a 分别 mod bmod \; bmodb 的余数互不相等,且有 bbb 个,在 [0,b−1][0, b - 1][0,b−1] 之间
∴∃k∈Z\therefore \exist k \in Z∴∃k∈Z 使得 k∗a mod b=1k * a \; mod \; b = 1k∗amodb=1 ;
五、费马小定理
如果 ppp 为质数,且 a mod p≠0a \; mod \; p \neq 0amodp=0 ,则 ap−1 mod 1a^{p - 1} \; mod \; 1ap−1mod1 ;
证明如下,
(a∗2a∗3a∗...∗(p−1)a) mod p=(ap−1∗(p−1)!) mod p(a * 2a * 3a * ... * (p - 1)a) \; mod \; p = (a^{p - 1} * (p - 1)!) \; mod \; p(a∗2a∗3a∗...∗(p−1)a)modp=(ap−1∗(p−1)!)modp
又 ∵p\because p∵p 为质数,且 aaa 不为 ppp 的倍数,根据裴蜀定理推论有,
a mod p,2a mod p,3a mod p,...,(p−1)a mod pa \; mod \; p, 2a \; mod \; p, 3a \; mod \; p, ... , (p - 1)a \; mod \; pamodp,2amodp,3amodp,...,(p−1)amodp 互不相等,且在 [1,p−1][1, p - 1][1,p−1] 之间
∴(a∗2a∗...∗(p−1)a) mod p\therefore (a * 2a * ... * (p - 1)a) \; mod \; p∴(a∗2a∗...∗(p−1)a)modp
=a mod p∗2a mod p∗...∗(p−1)a mod p= a \; mod \; p * 2a \; mod \; p * ... * (p - 1)a \; mod \; p=amodp∗2amodp∗...∗(p−1)amodp
=(p−1)! mod p= (p - 1)! \; mod \; p=(p−1)!modp
∴ap−1∗(p−1)! mod p=(p−1)! mod p\therefore a^{p - 1} * (p - 1)! \; mod \; p = (p - 1)! \; mod \; p∴ap−1∗(p−1)!modp=(p−1)!modp
又 ∵p\because p∵p 为质数
∴(p,(p−1)!)=1\therefore (p, (p - 1)!) = 1∴(p,(p−1)!)=1
∴ap−1 mod 1\therefore a^{p - 1} \; mod \; 1∴ap−1mod1