【算法笔记】整除与最大公约数(GCD)专题整理

发布于:2025-04-19 ⋅ 阅读:(25) ⋅ 点赞:(0)

参考文章链接(已获得作者授权)

一、整除:数学中的"完美分割"

定义
若整数 a a a能整除整数 b b b(记作 a ∣ b a\mid b ab),则存在整数 k k k使得 b = a ⋅ k b=a\cdot k b=ak
通俗理解:将 b b b分割为若干份大小为 a a a的块,无剩余。

关键性质

  1. 符号等价性
    a ∣ b ⇔ − a ∣ b ⇔ a ∣ − b ⇔ ∣ a ∣ ∣ ∣ b ∣ a\mid b\Leftrightarrow -a\mid b\Leftrightarrow a\mid -b\Leftrightarrow |a|\mid |b| abababab
    3 ∣ 12 3\mid12 312等价于 − 3 ∣ 12 -3\mid12 312 3 ∣ − 12 3\mid-12 312

  2. 传递性
    a ∣ b a\mid b ab b ∣ c    ⟹    a ∣ c b\mid c\implies a\mid c bcac
    3 ∣ 6 3\mid6 36 6 ∣ 12    ⟹    3 ∣ 12 6\mid12\implies3\mid12 612312

  3. 线性组合性
    a ∣ b a\mid b ab a ∣ c    ⟹    a ∣ ( x b + y c ) a\mid c\implies a\mid(xb+yc) aca(xb+yc) x , y ∈ Z x,y\in\mathbb{Z} x,yZ)。
    5 ∣ 10 5\mid10 510 5 ∣ 15    ⟹    5 ∣ ( 2 ⋅ 10 + 3 ⋅ 15 = 65 ) 5\mid15\implies5\mid(2\cdot10+3\cdot15=65) 5155(210+315=65)

  4. 非零约束性
    b ≠ 0 b\neq0 b=0 a ∣ b a\mid b ab,则 ∣ a ∣ ≤ ∣ b ∣ |a|\leq|b| ab
    7 ∣ 14 7\mid14 714 ∣ 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为例):

  1. 48 ÷ 18 = 2 48\div18=2 48÷18=2余12→转 gcd ⁡ ( 18 , 12 ) \gcd(18,12) gcd(18,12)
  2. 18 ÷ 12 = 1 18\div12=1 18÷12=1余6→转 gcd ⁡ ( 12 , 6 ) \gcd(12,6) gcd(12,6)
  3. 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,yZ使得:
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)+183=6)。

应用:密码学(如RSA中计算模逆元)。


五、扩展欧几里得算法(ExGCD)

目标:求解贝祖等式中的 x x x y y y
步骤(回溯法,以48和18为例):

  1. 欧几里得过程
    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)
  2. 回代表达式
    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=1812×1=18(4818×2)×1=18×348×1
    x = − 1 x=-1 x=1, y = 3 y=3 y=3

递归逻辑:每一步用上一步的余数表示当前余数。


总结图表

概念 核心思想 示例
整除 无余数分割 3 ∣ 12 3\mid12 312
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| ab保证有限步终止。


网站公告

今日签到

点亮在社区的每一天
去签到