最大公約數 最小公倍數 輾轉相除法的求解和證明

2022-09-22 06:24:09 字數 2296 閱讀 2551

兩個正整數的最大公約數(greatest common divisor,gcd)在計算機中通常使用輾轉相除法計算,最小公倍數(least common multiple, lcm)可以使用gcd來計算。下面首先介紹gcd和lcm。然後介紹輾轉相除法的計算形式,並證明為什麼可以得出gcd。

若正整數$\$的gcd為$r$,則$\$互質(gcd為1)。

假設正整數$\$的gcd為$r$,則它們可以被表示為$\$。若$\$不互質,有最大公約數$r_1\ne 1$,則$\$的最大公約數為$r_1r$與假設不符。

顯然成立:一系列正整數除以某一數,如果結果互質,則這個數是這些正整數的gcd。

任意正整數$\$都可以被它們對應的所有質因子的乘積表示。將它們所有質因子分別表示為集合$a_1,a_2,...,a_n$(給重複質因子加下標),則它們的最大公約數的質因子為

$\begin&a_1\cap a_2\cap...\cap a_n\\=&(...((a_1\cap a_2)\cap a_3)\cap...)\cap a_n\end$

因此多個數的gcd可以通過,兩兩數之間的gcd迭代求出。兩個正整數的gcd則可以使用輾轉相除法解決。

若正整數$\$的lcm為$r$,則$\$互質。

假設$\$的lcm為$r$,若$\$不互質,有公因子$r$,則有更小的公倍數$r/r$,與假設不符。

對於正整數$\$,假設存在正整數$r_1\ne r_2$,使得$\$互質,且$\$互質。

若$r_1/r_2=k$為正整數,則

$\=\$

有$k$為因子,不互質,與假設不符。

若$r_1/r_2=k$不是整數,則

$\=\$

不是正整數,與假設不符(互質前提是正整數)。  

綜上不可能存在兩個或以上不同的$r$,使得$\$互質。

又由於最小公倍數$r$一定存在,使得$\$互質。所以這樣的$r$只存在乙個,且是lcm。

上面證明得出,對於正整數$\$,只要獲得某個$r$,使得$\$互質,這個$r$就是lcm。

將正整數表示為gcd和對應互質數的乘積

$\=\$

令$r=p_1p_2...p_nr$,可以發現$\$互質(證明寫下面)。因此$\$的lcm為

$\displaystyle r=p_1p_2...p_nr=\frac}$

將$\$的所有質因子分別表示為集合$a_1,a_2,...,a_n$,顯然有$a_1\cap a_2\cap...\cap a_n=\varnothing$。設全集$e=a_1\cup a_2\cup...\cup a_n$,則$\$的質因子集合為$\sim a_1,\sim a_2,...,\sim a_n$。由於

$\begin&\sim a_1\cap\sim a_2\cap...\cap\sim a_n\\=&\sim(a_1\cup a_2\cup...\cup a_n)\\=&\sim e\\=&\varnothing\end$

所以$\$互質。

輾轉相除法通過迭代計算兩個正整數的gcd。每次用較小數對較大數取餘,然後將較小數賦值到較大數,餘數賦值到較小數,直到餘數為0,此時較小數為最大公約數。

計算319,377的最大公約數(演算法迭代過程):

迭代 較大數 

較小數 

餘數 0

-377

3191

377319582

31958293

5829

0得出最大公約數為29。

假設正整數$a>b$,計算它們的最大公約數。首先計算出它們的餘數$t$:

$a \, \text\, b = t$

則$a$可以表示為:

$a=pb+t$

其中$p$為$a/b$的正整數商。若$t=0$,則顯然$b$為$a,b$的最大公約數。若$t\neq 0$,我們只需證明$\$與$\$有相同的最大公約數,迭代就可以進行下去。

將$\$的公約數表示為$r_1\in r_1$,$r_1=\$,則有:

$t =a-pb= p_ar_1-pp_br_1=(p_a-pp_b)r_1$

顯然$\$的公約數$r_1$也是$t$的約數,因而$r_1$是$\$的公約數,有$r_1\subseteq r$,$r=\$。又因為$\$的公約數一定是$\$的公約數,所以有$r\subseteq r_1$。因此$r_1=r$。

將$\$的公約數表示為$r_2\in r_2$,$r_2=\$,則有:

$a =pb+t= pp_r_2+p_tr_2=(pp_+p_t)r_2$

顯然$\$的公約數$r_2$也是$a$的約數,因而$r_2$是$\$的公約數,有$r_2\subseteq r$。與上同理,得出$r_2 = r$。

於是$r_1=r=r2$,因此,$\$與$\$有相同的最大公約數。

習題4 7 最大公約數和最小公倍數(輾轉相除法)

本題要求兩個給定正整數的最大公約數和最小公倍數。輸入在一行中給出兩個正整數m和n 1000 在一行中順序輸出m和n的最大公約數和最小公倍數,兩數字間以1空格分隔。511 29273 2044法一 直接翻譯最小公倍數和最大公約數的數學意思。include int main void 最大公約數 m除以...

輾轉相除法求最大公倍數和最小公約數

這是我的第一篇部落格。希望自己以後也能堅持下去,來記錄我學習c 的一些歷程。今天做acm題,是求最小公倍數和最大公因數的。用輾轉相除法做。我一開始用int型,發現測試普通資料時均得出正確答案。但是用題目中的測試資料30000000,50000000的時候,最大公約數是沒有問題,但最大公倍數顯示是負數...

最大公約數 最小公倍數

求最大公約數最直接的辦法是從兩數中較小數與2之間的所有整數中乙個乙個的找。但這個方法有點浪費。有兩種有名的方法 1.輾轉相除法2.更相減損之術這兩種方法比較有名,而且現在人教版的高中數學中已經介紹了這兩種方法。下面這個是第2個,因為它只需要加減法就可以,效率高。int maxfactor unsig...