当前位置: 首页 > news >正文

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

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

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

定义
若整数 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保证有限步终止。

相关文章:

  • 【多目标进化算法】NSGA-II 算法(结合例子)
  • 表格RAG技术实战指南
  • 如何使用 DeepSeek 帮助自己的工作?
  • 【c语言】深入理解指针3——回调函数
  • 2025年03月中国电子学会青少年软件编程(Python)等级考试试卷(三级)真题
  • 非比较排序——计数排序
  • GitHub创建远程仓库
  • 【Win】 cmd 执行curl命令时,输出 ‘命令管道位置 1 的 cmdlet Invoke-WebRequest 请为以下参数提供值: Uri: ’ ?
  • 力扣刷题Day 20:柱状图中最大的矩形(84)
  • 万物对接大模型:【爆火】MCP原理与使用指南
  • 广东水利水电安全员 B 证考试精选题
  • AutoSAR从概念到实践系列之MCAL篇(一)——MCAL架构及其模块详解
  • http请求和websocket区别和使用场景
  • o3和o4-mini的升级有哪些亮点?
  • 纯CSS实现自动滚动到底部
  • C++ 二叉搜索树
  • 安装多个DevEco Studio版本,如何才能保证各个版本不冲突?
  • 「仓颉编程语言」Demo
  • 网络互连与互联网3
  • 从零到精通:用 GoFrame 和 go-resty 优雅调用第三方 HTTP API
  • 发布近百条《原神》涉密游戏内容,游戏资讯网站被判赔33万元
  • 撤销逾千名留学生签证,特朗普政府面临集体诉讼
  • 亲诚惠容行大道,命运与共开新篇——中共中央政治局委员、外交部长王毅谈习近平主席对越南、马来西亚、柬埔寨进行国事访问
  • 瑞安房地产王颖:房地产市场看到很好的信号,上海项目销售压力不大
  • 习近平会见柬埔寨国王西哈莫尼
  • 商务部:美国对小额包裹关税政策将严重影响美国消费者的利益