关于GCD的证明
關于GCD歐幾里得算法的證明過程:
證明一:
有兩個數 a b
設這兩個數的gcd(a,b) = g
那么假設其中比較大的數 a
a = k*b +r;
那么當我們對a求對b的最大公約數時
如果沒有余數r 那么gcd 就等于b
那么現(xiàn)在有r了 所以gcd 的取值就取決于r了
因為現(xiàn)在我們來看r
r一定是個小于b的值
所以a和b的GCD問題就變成了我們現(xiàn)在求得就是r和b的GCD問題(r==0 那么就說明 GCD = b;r!=0 說明r對GCD有制約 需要考慮r和b的GCD )
那么問題回到了開始
現(xiàn)在的 a = b ; b = r;
做重復的操作
由于每次的r都會不斷縮小
所以最后當我們再做a%b的時候為0 那么就說明我們得到了GCD = b;
那么為什么r一定是GCD的倍數
我們看
a=k1?gcd
b=k2?gcd
那么當較大的a=k3?b+r
r=k3?b+k1?b
可知 r=k3?k2?gcd+k1?gcd
可知r一定是GCD的倍數
所以我們繼續(xù)用r和b繼續(xù)求解GCD
最終可以求得最后的GCD大小
證明二:
還有一種證明我們可以這樣來
a = k*b +r;
r = a mod b
設d 為 a和b的一個公約數 那么
d|a d|b 設r是a對b的余數r = a- k*b
那么d|r
所以d也是(b,a%b)的公約數
d|b , d|r, 由于a = k*b+r
所以d也是a和b的公約數 所以這個d有普遍性
(a,b)和(b,a mod b) 的公約數是一樣的
其最大公約數相等
總結
- 上一篇: Python interview_pyt
- 下一篇: java实现pdf转word