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

【算法笔记】整除与最大公约数(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保证有限步终止。

http://www.xdnf.cn/news/178.html

相关文章:

  • 量子神经网络编译器开发指南:从理论突破到产业落地全景解析
  • ubuntu系统上基于RKE2部署K8S及Rancher
  • Axure PR 9 中继器 10 编辑行
  • Gnome将默认终端设置为 Kitty
  • MCP Server驱动传统SaaS智能化转型:从工具堆叠到AI Agent生态重构,基于2025年技术演进与产业实践
  • 第六届电气技术与自动控制国际学术会议(ICETAC 2025)
  • 极狐GitLab 注册限制如何设置?
  • 深度学习总结(21)
  • 在线留言板系统PHP源码
  • 【Linux系统篇】:System V IPC核心技术解析---从共享内存到消息队列与信号量
  • UI自动化测试介绍及入门
  • webgl入门实例-11模型矩阵 (Model Matrix)基本概念
  • 裸金属服务器的应用场景有哪些?
  • 软考高级-系统架构设计师 论文范文参考(一)
  • 集成电路流片随笔16:jtag top下的两个子模块概览 tinyriscv
  • 【HDFS入门】HDFS性能调优实战:从基准测试到优化策略
  • Flash存储器(一):接口标准全解析
  • ARINC818协议(三)
  • rulego-server是一个开源程序,是一个轻量级、无依赖性的工作流自动化平台。支持 iPaaS、流式计算和 AI 能力。
  • 问题三、导入到Isaacsim中的文件无法修改节点名称(已解决)
  • VR拍摄要点与技巧有哪些?有哪些最佳实践?
  • Docker快速入门
  • Ubuntu20.04 部署llama-factory问题集
  • zset.
  • 计算机基础 | 常见进制与单位简介 / 表示 / 描述
  • 超导体的应用价值:超导磁探测技术开启科技与生活的新变革
  • P2P用服务器运行所需的带宽资源
  • RT-DETR源码学习bug记录
  • 关系型数据库MYSQL(续)
  • 【网络编程】UDP数据报套接字编程