【算法笔记】整除与最大公约数(GCD)专题整理
参考文章链接(已获得作者授权)
一、整除:数学中的"完美分割"
定义
若整数 a a a能整除整数 b b b(记作 a ∣ b a\mid b a∣b),则存在整数 k k k使得 b = a ⋅ k b=a\cdot k b=a⋅k。
通俗理解:将 b b b分割为若干份大小为 a a a的块,无剩余。
关键性质
-
符号等价性
a ∣ b ⇔ − a ∣ b ⇔ a ∣ − b ⇔ ∣ a ∣ ∣ ∣ b ∣ a\mid b\Leftrightarrow -a\mid b\Leftrightarrow a\mid -b\Leftrightarrow |a|\mid |b| a∣b⇔−a∣b⇔a∣−b⇔∣a∣∣∣b∣
例: 3 ∣ 12 3\mid12 3∣12等价于 − 3 ∣ 12 -3\mid12 −3∣12或 3 ∣ − 12 3\mid-12 3∣−12。 -
传递性
a ∣ b a\mid b a∣b且 b ∣ c ⟹ a ∣ c b\mid c\implies a\mid c b∣c⟹a∣c。
例: 3 ∣ 6 3\mid6 3∣6且 6 ∣ 12 ⟹ 3 ∣ 12 6\mid12\implies3\mid12 6∣12⟹3∣12。 -
线性组合性
a ∣ b a\mid b a∣b且 a ∣ c ⟹ a ∣ ( x b + y c ) a\mid c\implies a\mid(xb+yc) a∣c⟹a∣(xb+yc)( x , y ∈ Z x,y\in\mathbb{Z} x,y∈Z)。
例: 5 ∣ 10 5\mid10 5∣10和 5 ∣ 15 ⟹ 5 ∣ ( 2 ⋅ 10 + 3 ⋅ 15 = 65 ) 5\mid15\implies5\mid(2\cdot10+3\cdot15=65) 5∣15⟹5∣(2⋅10+3⋅15=65)。 -
非零约束性
若 b ≠ 0 b\neq0 b=0且 a ∣ b a\mid b a∣b,则 ∣ a ∣ ≤ ∣ b ∣ |a|\leq|b| ∣a∣≤∣b∣。
例: 7 ∣ 14 7\mid14 7∣14且 ∣ 7 ∣ ≤ ∣ 14 ∣ |7|\leq|14| ∣7∣≤∣14∣。
二、最大公约数(GCD):寻找"最大共同因子"
定义
gcd ( a , b ) \gcd(a,b) gcd(a,b)是能同时整除 a a a和 b b b的最大正整数。
应用场景:均匀分配问题(如分糖、分饼干)。
示例
- gcd ( 24 , 36 ) = 12 \gcd(24,36)=12 gcd(24,36)=12
解释:24和36的公约数为1,2,3,4,6,12,最大的是12。
三、欧几里得算法(GCD计算)
核心思想:通过余数递归缩小问题规模。
步骤(以48和18为例):
- 48 ÷ 18 = 2 48\div18=2 48÷18=2余12→转 gcd ( 18 , 12 ) \gcd(18,12) gcd(18,12)
- 18 ÷ 12 = 1 18\div12=1 18÷12=1余6→转 gcd ( 12 , 6 ) \gcd(12,6) gcd(12,6)
- 12 ÷ 6 = 2 12\div6=2 12÷6=2余0→终止, gcd = 6 \gcd=6 gcd=6。
原理: gcd ( a , b ) = gcd ( b , a m o d b ) \gcd(a,b)=\gcd(b,a\bmod b) gcd(a,b)=gcd(b,amodb)。
四、贝祖定理:线性方程的整数解
定理内容
对任意整数 a , b a,b a,b,存在 x , y ∈ Z x,y\in\mathbb{Z} x,y∈Z使得:
a x + b y = gcd ( a , b ) ax+by=\gcd(a,b) ax+by=gcd(a,b)
示例
- a = 48 a=48 a=48, b = 18 b=18 b=18, gcd ( 48 , 18 ) = 6 \gcd(48,18)=6 gcd(48,18)=6
解: x = − 1 x=-1 x=−1, y = 3 y=3 y=3(因 48 ⋅ ( − 1 ) + 18 ⋅ 3 = 6 48\cdot(-1)+18\cdot3=6 48⋅(−1)+18⋅3=6)。
应用:密码学(如RSA中计算模逆元)。
五、扩展欧几里得算法(ExGCD)
目标:求解贝祖等式中的 x x x和 y y y。
步骤(回溯法,以48和18为例):
- 欧几里得过程:
48 = 18 × 2 + 12 18 = 12 × 1 + 6 12 = 6 × 2 + 0 ( gcd = 6 ) \begin{align*} 48&=18\times2+12\\ 18&=12\times1+6\\ 12&=6\times2+0\quad(\gcd=6) \end{align*} 481812=18×2+12=12×1+6=6×2+0(gcd=6) - 回代表达式:
6 = 18 − 12 × 1 = 18 − ( 48 − 18 × 2 ) × 1 = 18 × 3 − 48 × 1 \begin{align*} 6&=18-12\times1\\ &=18-(48-18\times2)\times1\\ &=18\times3-48\times1 \end{align*} 6=18−12×1=18−(48−18×2)×1=18×3−48×1
得 x = − 1 x=-1 x=−1, y = 3 y=3 y=3。
递归逻辑:每一步用上一步的余数表示当前余数。
总结图表
概念 | 核心思想 | 示例 |
---|---|---|
整除 | 无余数分割 | 3 ∣ 12 3\mid12 3∣12 |
GCD | 最大共同因子 | gcd ( 24 , 36 ) = 12 \gcd(24,36)=12 gcd(24,36)=12 |
欧几里得算法 | 余数递归 | gcd ( 48 , 18 ) = 6 \gcd(48,18)=6 gcd(48,18)=6 |
贝祖定理 | 线性方程的整数解 | 48 x + 18 y = 6 48x+18y=6 48x+18y=6 |
ExGCD | 回溯求解 x , y x,y x,y | x = − 1 x=-1 x=−1, y = 3 y=3 y=3 |
注:所有性质与算法均基于整数运算,且 b ≠ 0 b\neq0 b=0时 ∣ a ∣ ≤ ∣ b ∣ |a|\leq|b| ∣a∣≤∣b∣保证有限步终止。