欧几里得算法是用来求两个数的最大公约数(greatest common divisor(gcd)),其具体过程如下:
有 a , b a,b a,b 两个正整数,现在按以下步骤求它们最大公约数,即 g c d ( a , b ) gcd(a,b) gcd(a,b) :
a / b    = q 1 ⋯ ⋯ r 1 a \ /\ b \ \;= q_1 \cdots\cdots r_1 a / b =q1⋯⋯r1
b / r 1    = q 2 ⋯ ⋯ r 2 b\ /\ r_1 \;= q_2 \cdots\cdots r_2 b / r1=q2⋯⋯r2
r 1 / r 2 = q 3 ⋯ ⋯ r 3 r_1 / r_2 \ = q_3 \cdots\cdots r_3 r1/r2 =q3⋯⋯r3
⋯ ⋯ \cdots\cdots ⋯⋯
r m / r n = q t ⋯ ⋯ 0 r_m / r_n = q_t \cdots\cdots 0 rm/rn=qt⋯⋯0
如此反复迭代直至余数为0,最终得到的 r n r_n rn 就是 a , b a,b a,b 的最大公约数,这就是欧几里得算法。
欧几里得算法的证明可以转化为 g c d ( a , b ) = g c d ( b , r 1 ) = g c d ( r 1 , r 2 ) = ⋯ = g c d ( r m , r n ) gcd(a,b) = gcd(b,r_1) = gcd(r_1,r_2) = \cdots = gcd(r_m,r_n) gcd(a,b)=gcd(b,r1)=gcd(r1,r2)=⋯=gcd(rm,rn) 的证明,实际只要证明 g c d ( a , b ) = g c d ( b , r 1 ) gcd(a,b) = gcd(b,r_1) gcd(a,b)=gcd(b,r1) ,后面的式子同理可得,其证明如下:
前提公理:若 a = m d , b = n d a=md,b=nd a=md,b=nd( m 、 n 、 d 1 m、n、d_1 m、n、d1 为正整数),
则 m , n m,n m,n 互质    ⟺    \iff ⟺ d d d 为 a 、 b a、b a、b 的最大公约数。
假设 g c d ( a , b ) = d 1 gcd(a,b)=d_1 gcd(a,b)=d1 即 a 、 b a、b a、b 最大公约数为 d 1 d_1 d1,并且有
a = m d 1 , b = n d 1 ( m 、 n 、 d 1 为 正 整 数 ) a = md_1 , b = nd_1(m、n、d_1为正整数) a=md1,b=nd1(m、n、d1为正整数)
又有 a = b q + r 1 , b = n d 1 a = bq + r_1, b = nd_1 a=bq+r1,b=nd1,则
r 1 = a − b q = ( m − n q ) d 1 r_1 = a -bq = (m-nq)d_1 r1=a−bq=(m−nq)d1
现在只要证明 n 、 ( m − n q ) n、(m-nq) n、(m−nq) 互质再利用前提公理就可证明 g c d ( b , r 1 ) = d 1 gcd(b,r_1)=d_1 gcd(b,r1)=d1
假设 n 、 ( m − n q ) n、(m-nq) n、(m−nq)不是互质的,有 g c d ( n , m − n q ) = d 2 ( d 2 > 1 ) gcd(n,m-nq)=d_2 (d_2> 1) gcd(n,m−nq)=d2(d2>1) 且
n = x d 2 , m − n q = y d 2 ( x 、 y 、 d 2 为 正 整 数 ) n=xd_2,m-nq = yd_2(x、y、d_2 为正整数) n=xd2,m−nq=yd2(x、y、d2为正整数)
则
m = n q + y d 2 = ( x q + y ) d 2 m = nq + yd_2 = (xq + y)d_2 m=nq+yd2=(xq+y)d2
那么 a = m d = ( x q + y ) d 1 d 2 a = md =(xq+y)d_1d_2 a=md=(xq+y)d1d2
b = n d = x d 1 d 2 b = nd =xd_1d_2 b=nd=xd1d2
a 、 b a、b a、b 的最大公约数变成 d 1 d 2 d_1d_2 d1d2 ,不符合假设条件 g c d ( a , b ) = d 1 gcd(a,b)=d_1 gcd(a,b)=d1 ,故 n 、 ( m − n q ) n、(m-nq) n、(m−nq) 互质。
由前提公理可得:
g c d ( b , r 1 ) = d 1 gcd(b,r_1)=d_1 gcd(b,r1)=d1
故
g c d ( a , b ) = g c d ( b , r 1 ) = d 1 gcd(a,b) = gcd(b,r_1) = d_1 gcd(a,b)=gcd(b,r1)=d1
由此证明欧几里得算法。