欧几里得算法,也称辗转相除法,是解决数学类问题中求两个数的最大公约数的常用算法,其原理为: gcd(x,y)=gcd(y,x(mod y))gcd(x,y) = gcd(y,x (mod~y))

那么现在我们要证明其原理的正确性


证明:

1.1.

我们要证明x,yx,y的最大公约数与yx mod yy,x~mod~y的最大公约数相等

我们不妨设x=ky + bx = ky~+~b,显然有b=x mod yb = x~mod~y

b=xkyb = x-ky

继续设x mod d=0x~mod~d = 0 && y mod d=0y~mod~d = 0

则有等式x/d(y/d)k=b/dx/d-(y/d)*k = b/d

由等式左边可得,dbd|b

分析等式可得d是xyx,y的公约数,它也会是y,x mod yy,x~mod~y的公约数

2.2.

反过来也需要证明

y mod d=0y~mod~d = 0 && b mod d=0b~mod~d = 0

我们依然可以得到之前的等式:

x/d(y/d)k=b/dx/d-(y/d)*k = b/d

b/d+(y/d)k=x/db/d+(y/d)*k = x/d

左边的式子即为整数,所以d|x

既然有整数dd既是x,yx,y的公约数,又是y,xy,x%y的公约数

那么我们完全可以得出gcd(x,y)=gcd(y,x(mod y))gcd(x,y) = gcd(y,x(mod~y))

则欧几里得算法的正确性是毋庸置疑的


证毕