循环不变量:在第2 - 6行的while循环的每次迭代开始时,a,b的最大公因数与A,B的最大公因数相同。
循环不变量的性质:
初始化:
在循环的第一次迭代前,a = A,b = B,循环不变量显然成立。
保持:
对于这一性质的证明涉及到辗转相除法的数学原理。要证循环不变量的保持,只需证明a,b的最大公因数等于b,r的最大公因数。要证明这一点,只需证明a,b的因子集与b,r的因子集完全相同。
根据这一数学原理:
如果a是任一整数而b是任一大于零的整数,则我们总能找到一整数q,使得a = bq + r,这里r是满足不等式0 <= r <b的一个整数。
显然,可以将某次循环中a,b,r的关系表示如下:a = qb +r.
假设:u为a,b的任意一个因子,即a = su,b = tu. r = a - qb = su - qtu = (s - qt)u. 这里的s - qt显然为正整数。r可以整除u。故而得证b,r的因子集包含a,b的因子集。
假设:u为b,r的任意一个因子,即r = su,b = tu。a = qb + r = qtu + su = (s + qt)u. 这里的s + qt显然为正整数。a可以整除u。故而得证a,b的因子集包含b,r的因子集。
综上,可以证明a,b的因子集与b,r的因子集相等,故而得证。
终止:
在循环终止时,此时的r = 0,说明:此时a 可以整除b,即b为a,b的最大公因子。即此时的b为A,B的最大公因子。