欧几里得算法证明
?? ??? ?歐幾里得算法,也叫做輾轉(zhuǎn)相除法,gcd(a, b) = gcd (b, a%b),即a和b最大公約數(shù)等于b和a%b的最大公約數(shù)。相信大家都會(huì)用,但是很多人不知道為什么,我也看了很多文章,寫的都不太相同,這里我說說我自己的證明過程:
?? ??? ?這里的證明我分為兩步求證:
?? ??? ?1.求證:a和b的公約數(shù)等于b和a%b的公約數(shù);
?? ??? ?2.求證:b和a%b的公約數(shù)是最大公約數(shù)。
?? ??? ?
?? ??? ?求證1:a和b公約數(shù)等于b和a%b的公約數(shù)
?? ??? ?為了方便大家看,我先把下面用到的變量注一下:
?? ??? ??? ?n:公約數(shù)?? ??? ?m:a%b?? ??? ??? ?k、k'、k'':都是常數(shù)
?? ??? ?(先不看,跟著我的思路走,過程中忘了哪個(gè)變量是干什么的再回來看一下)
?? ??? ?這里設(shè)一個(gè)n,n是a和b的一個(gè)公約數(shù),所以有?
?? ??? ??? ??? ??? ?a/n = k' , b/n = k'' (k'和k''都是常量) ? ? --------------①
?? ??? ?這里既然證明a和b最大公約數(shù)等于b和a%b的最大公約數(shù),那么這里你還需要有這三個(gè)數(shù),a和b是已知的,那么這里我們?cè)O(shè)m = a % b ? ?(m ≠ 0 ,若m=0,b一定是a和b的最大公約數(shù)),那么
?? ??? ??? ??? ??? ?a = kb + m ?(k是一個(gè)常量) ? --------------------------②
?? ??? ?②變形得:
?? ??? ??? ??? ??? ?m = a - kb ? -----------------------------------------------③
?? ??? ?③等式兩邊同時(shí)除以n得:
?? ??? ??? ??? ??? ?m/n = a/n - k(b/n) ? ?-------------------------------------④
?? ??? ?①④結(jié)合,得:
?? ??? ??? ??? ??? ?m/n = k' - kk'' ?--------------------------------------------⑤
?? ??? ?看⑤式中,k、k'、k''都是常數(shù),所以m/n是一個(gè)常數(shù),所以n也是m的約數(shù),所以說n是a、b、m三個(gè)的公約數(shù),那么可以得到n也是b和a%b的公約數(shù)。
?? ??? ?看到這我們已經(jīng)得出了結(jié)論一:a和b公約數(shù)等于b和a%b的公約數(shù)。
? ? ? ??
? ? ? ? 下面只需證明結(jié)論一中的公約數(shù)是他們的最大公約數(shù)即可:
? ? ? ? 求證2:公約數(shù)是最大公約數(shù)
?? ??? ?首先,根據(jù)結(jié)論一,我們可以找出多組數(shù)據(jù),使得他們都有一個(gè)共同的約數(shù)n
?? ??? ?例如:(a, b)?? ??? ?(b, a%b)?? ??? ?(a%b, b%(a%b)) ? ?... ? ? ? 他們每組都有一個(gè)公約數(shù)n
?? ??? ?如此一直向下,這里我們可以設(shè)(A, B)的公約數(shù)為n,每組數(shù)據(jù)都用(A, B)來更新
?? ??? ?(每次A都變?yōu)樵瓉淼腂,B變成原來的A%B)
?? ??? ?因?yàn)锳%B總是小于B,如果一直更新下去,A%B總有變成0的時(shí)候,也就是A % B = 0
?? ??? ?設(shè)當(dāng)前組合為(A,B),且滿足條件(A % B = 0),這時(shí)我們可以得到組合(A,B)的最大公約數(shù)為B
?? ??? ?現(xiàn)在我們將上面那一行數(shù)據(jù)延伸:(a, b)?? ??? ?(b, a%b)?? ??? ?(a%b, b%(a%b)) ? ?...?? ?(kA + B, A)?? ?(A, B)?? ??? ?
?? ??? ?上面這一組數(shù)據(jù)都有一個(gè)公約數(shù)n,那么我們只需證明(A, B)的最大公約數(shù)與(kA + B, A)的最大公約數(shù)相等
?? ??? ?現(xiàn)在已知B是(A, B)的最大公約數(shù),又已知(kA + B, A)?? ?(A, B)有相同的約數(shù)n
?? ??? ?我們此時(shí)假設(shè)(A, B)的這個(gè)約數(shù)n就是最大公約數(shù)B,那么只需證明B也是(kA + B, A)的最大公約數(shù)即可得出結(jié)論這里的公約數(shù)n是最大公約數(shù)。
?? ??? ?那么也就是求證:B是(kA + B, A)的最大公約數(shù)
?? ??? ??? ??? ?已知A % B = 0得:
?? ??? ??? ??? ??? ??? ??? ?A = ?k'B ? ----------------------------------⑥
?? ??? ??? ??? ?結(jié)合⑥得:
?? ??? ??? ??? ??? ??? ??? ?kA + B = (kk'+1)B ? ---------------------⑦
?? ??? ??? ??? ?根據(jù)⑥⑦我們可以得出(kA + B, A)的公約數(shù)為:B以及B的約數(shù)
?? ??? ??? ??? ?所以(kA + B, A)的最大公約數(shù)為B
?? ??? ?得出結(jié)論:a和b最大公約數(shù)等于b和a%b的最大公約數(shù),也就是歐幾里得算法gcd(a, b) = gcd (b, a%b)。
?? ??? ?
?? ??? ?
?? ??? ?
?? ??? ??? ??? ??? ?
總結(jié)
- 上一篇: 冒泡排序 最坏情况
- 下一篇: jq onclick