PrepStack · Markdown HTML

GCD / LCM 与整除结构

数学、数论与组合 · HTML

数学 / 逻辑形态

gcd(a,b)=gcd(b,a mod b);lcm(a,b)=|a/gcd(a,b)*b|;ax+by 的可达整数恰为 gcd(a,b) 的倍数。

识别信号

容易误判的相似信号

SignalWhy it is different
需要完整质因数指数GCD 只给公共因子汇总;需因子细节时做分解。
实数近似比例GCD 适用于精确整数,浮点应先定义误差模型。

核心不变量

欧几里得每步保持公约数集合不变,且第二参数严格变小直到 0。

状态、转移与处理顺序

ItemDefinition
State当前整数对 (a,b),以及归一化时的符号约定。
Transition反复 (a,b)=(b,a%b);结束时 |a| 是 GCD。
Frontier / order余数是尚未消去的公共因子信息,数值单调缩小。

Python 骨架

def gcd(a, b):
    a, b = abs(a), abs(b)
    while b:
        a, b = b, a % b
    return a

def lcm(a, b):
    return 0 if a == 0 or b == 0 else abs(a // gcd(a,b) * b)

def normalize_ratio(x, y):
    if y == 0: return (1 if x > 0 else -1 if x < 0 else 0, 0)
    if y < 0: x, y = -x, -y
    g = gcd(x, y)
    return (x // g, y // g)

正确性思路

  1. 任一公约数同时整除 a、b,也整除 a-qb=a%b。
  2. 反过来整除 b 与余数的数也整除 a,所以公约数集合不变。
  3. 余数绝对值下降,算法终止于 (g,0)。
  4. 用 g 同除分子分母得到唯一规范比例(配合符号规则)。

复杂度

TimeSpaceParameters
O(log min(|a|,|b|))O(1)a、b 为整数;多值 GCD 可折叠处理

边界条件

错误模式

PatternWhy it fails / fix
LCM 先相乘可能溢出,应先除 gcd。
符号不统一等价比例会变成不同键。
用除法判断浮点比例精度与零分母会破坏等价性。

选择与排除规则

相关模板

RelationTemplateBoundary
数论组合模运算与快速幂求模逆元或扩展欧几里得
细化结构筛法与质因数分解需要质因子指数而非单个 gcd

原创微型例子

环节内容
Result得到 (-2,3)。
Scenario把方向向量 (-6,9) 规范化。
Walkthroughgcd(6,9)=3,同除并保持分母方向规则。

Recall prompts

我的补充