輾除法求最大公約數 輾轉相除求最大公約數原理

2021-10-16 10:26:48 字數 990 閱讀 7216

輾轉相除法**

**並不難,很多人都會寫。

public static int f(int a, int b) return a; }
舉個例子,例如6,8按照**執行一遍。

求最大公約數步驟兩個數的最大公約數是指能同時整除它們的最大正整數。 設兩數為a、b(a≥b),求a和b最大公約數的步驟如下:

(1)用a除以b(a≥b),得 a / b = q…r1 。

(2)若 r1 = 0 ,則 (a, b) = b;

(3)若 r1 不等於 0 ,則再用b除以 r1 ,得b / r1 = q…r2(此處q不是上方的q).

(4)若 r2=0 ,則(a,b)=r1 ;若 r2不等於0 ,則繼續用r1除以 r2 ,……,如此下去,直到能整除為止。 其最後乙個餘數為0的除數即為 (a,b) 的最大公約數。

為什麼這樣進行遞迴除下去

假設有兩個數x和y,存在乙個最大公約數z=(x,y),即x和y都有公因數z, 那麼x一定能被z整除,y也一定能被z整除,所以x和y的線性組合mx±ny也一定能被z整除。(m和n可取任意整數)

對於輾轉相除法來說,思路就是:若x>y,設x/y=n餘c,則x能表示成x=ny+c的形式,將ny移到左邊就是x-ny=c,由於一般形式的mx±ny能被z整除,所以等號左邊的x-ny(作為mx±ny的乙個特例)就能被z整除,即x除y的餘數c也能被z整除。

由以上的推理可知 a / b的餘數,也能被 (a,b)的最大公約數整除,因此就將問題轉化為求其中較小的數和餘數的最大公約數,最終將範圍不斷減小,從而求出答案。

輾轉相除法求最大公約數

之前總結過一次高德納taocp中的最大公約數求解,其實課後題中的演算法修改要求實現的是輾轉相除法求解最大公約數。這個題目我最初的理解理解錯了,自然也沒有做出標準答案。現在按照標準答案的解答寫一下相應的 實現 defmaxcommdivisor m,n while m n 0 m m n if m 0...

求最大公約數 輾轉相除法

設求a和b的最大公約數c 則可看做邊長分別為a和b的矩形,可恰好被邊長為c的正方形無縫隙填滿 方法 不斷地用長邊除以短邊取餘數,直到長邊與短邊相等,即為所求正方形 給定平面上的兩個格點p1 x1,y1 p2 x2,y2 線段p1p2上,除p1和p2以外一共有幾個點。示例 p1 3,9 p2 7,1 ...

基於輾轉相除法求最大公約數

1 p 0,q 0 無最大公約數 2 p 0,q 0 最大公約數為q 3 p 0,q 0 最大公約數為p 4 p 0,q 0 最大公約數可通過輾轉相除取餘數轉化為 2 3 這樣的情況來求解 遞迴版,非遞迴用迴圈 public class euclid public static int euclid...