求兩數的最大公約數和最小公倍數的方法

2021-08-07 14:08:16 字數 926 閱讀 4741

先說求最小公倍數的方法,很簡單:

記a,b的最大公約數為 ma = (a, b),最小公倍數mi = [a, b]。

則 mi = a * b / ma;

原理簡單: mi = ( a / ma ) * ( b / ma ) * ma = a * b / ma。

主要說其中的兩種 1 輾轉相除法 2 更損相減術

1 輾轉相除法

方法: 求 a b兩數的最大公約數,

1) 令 k = a%b,若k=0,則最大公約數為b

2) 否則,令 a = b, b= k;再進行1)

其原理為:

因為 ma = (a, b); 不妨設 a >= b, 則有 m*a + n*b 能被ma整除,即 (m*a + n*b) % ma =0

若 a / b = s ...... y , 即 a%b=y,則有 a = b*s + y ; 移項可得:

y = a - b*s; 又因為 (m*a + n*b) % ma =0, 則有 y % ma = 0;

即 (a, b) = (b, y);

2 更損相減術

方法:1) 若a,b 兩數均為偶數,則均除以2以約簡,直到兩數中至少有一數不為偶數

2)用大數減去小數,即 a - b = c, 並 更新值 a = b, b = c (b>=c) , 重複相減,c=0; 則 最大公約數為當前的b(或a)值。

原理:不妨設a > b,設 ma =  ( a, b ), a = m * ma,b = n * ma;則有m > n,

經過一次相減, c = a - b = (m - n)*ma; 

若m - n >= n; 此時更新a = (m - n)*ma; b = n*ma,

若m - n <  n; 此時更新a = n*ma; b =  (m - n)*ma,

顯然經過若干次相減後 a - b = ma。

求最大公約數,最小公倍數

歐幾里德遞迴演算法,大數對小數取餘直到小數為0,大數為最大公約數 param m param n return static int maxcommondivisor euclid recursion int m,int n return m 劉徽兩數相減直到兩數相等,等數為最大公約數 param ...

求最大公約數和最小公倍數

本篇文章中求最大公約數的方法是輾轉相除法,又稱歐幾里德演算法 方法是用較大的數除以較小的數,求得餘數,將餘數變成除數,除數變成被除數,重複這個過程,直到餘數變成0。而求最小公倍數的方法則是用原本兩個數的乘積除以最大公約數。define crt select no warings include in...

求最大公約數和最小公倍數

輾轉相除法求最大公因數 輾轉相除法 簡單來說 兩個數,用較大的數除以較小的數,得到第一餘數,在用較小的數除以第乙個餘數,得到第二餘數,在用第二個餘數除以第一餘數,重複過程,直到到餘數為0 那麼最後乙個餘數就是這兩個數的最大公約數 舉例說明 a 36,b 10 1.36除以10得3,餘6 2.10除以...