先說求最小公倍數的方法,很簡單:
記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除以...