最大公约数即为Greatest Common Divisor,常缩写为gcd。

更相减损术

描述

更相减损术是出自《九章算术》的一种求最大公约数的算法,它原本是为约分而设计的,但它适用于任何需要求最大公约数的场合。

可半者半之,不可半者,副置分母、子之数,以少减多,更相减损,求其等也。以等数约之。

定义

a,bN,abgcd(a,b)=gcd(b,ab)=gcd(a,ab)\forall a, b \in \mathbb{N}, a \geqslant b \Rightarrow \gcd(a, b) = \gcd(b, a - b) = \gcd(a, a - b)

a,bNgcd(2a,2b)=2gcd(a,b)\forall a, b \in \mathbb{N} \Rightarrow gcd(2a, 2b) = 2 \cdot \gcd(a, b)

证明

aba \mid b 表示 aa 能整除 bbaabb 的约数)。

  • 显然,根据最大公约数的定义,后者是成立的,主要证明前者。
  • 对于 a,ba,b任意公约数 dd,因为 da,dbd \mid a,d \mid b,所以 d(ab)d \mid (a−b)。(不妨设 a=xd,b=yda=x \cdot d,b=y \cdot d,那么 ab=xdyd=(xy)da−b=x \cdot d−y \cdot d=(x−y) \cdot d,显然 (xy)d(x−y) \cdot ddd 的倍数)
  • 因为 dd 是任意取的,所以可以取到整个 a,ba,b公约数集合。故 a,ba,b公约数集合b,abb,a−b 的公约数集合相同,于是他们的最大公约数自然也相等。对于 a,aba,a−b 同理。