輾轉相除法的迴圈不變數證明
阿新 • • 發佈:2020-08-12
迴圈不變數:在第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的最大公因子。