輾轉相除法求最大公約數
阿新 • • 發佈:2018-12-20
輾轉相除法, 又名歐幾里德演算法(Euclidean algorithm),是求最大公約數的一種方法。它的具體做法是:用較小數除較大數,再用出現的餘數(第一餘數)去除除數,再用出現的餘數(第二餘數)去除第一餘數,如此反覆,直到最後餘數是0為止。如果是求兩個數的最大公約數,那麼最後的除數就是這兩個數的最大公約數。 另一種求兩數的最大公約數的方法是更相減損法。
原理
兩個數的最大公約數是指能同時整除它們的最大正整數。 [1] 設兩數為a、b(a≥b),求a和b最大公約數 的步驟如下: (1)用a除以b(a≥b),得 。 (2)若 ,則 ; (3)若 ,則再用b除以 ,得 . (4)若 ,則 ;若 ,則繼續用 除以 ,…,如此下去,直到能整除為止。 其最後一個餘數為0的除數即為 的最大公約數。
證明
程式碼實現
#include <bits/stdc++.h> using namespace std; inline int read() { int s = 0, w = 1; char ch = getchar(); while(ch < '0' || ch > '9') { if(ch == '-') w = -1; ch = getchar(); } while(ch >= '0' && ch <= '9') { s = (s << 1) + (s << 3) + ch - '0'; ch = getchar(); } return s * w; } int x, y; int m, n; int c, d; int YS; int work(int a, int b) { m = max(a, b); n = min(a, b); c = m / n; d = m % n; if(d == 0) { return n; } else { work(b, d); } } int main() { x = read(); y = read(); YS = work(x, y); cout << YS << endl; return 0; }