基本介紹
- 中文名:輾轉相除法
- 外文名:Euclidean algorithm
- 別稱:歐幾里德算法
- 用途:求最大公約數
- 歸屬學科:數學
- 出現書目:《幾何原本》
基本原理
![](/img/c/eb3/57603b0e78a26f729f6e9e235bcb.jpg)
![](/img/a/6b2/2a2ab0fe15558f92a2d512a5e47e.jpg)
![](/img/e/27d/0018f74b7fd34e9143a18a635dcd.jpg)
![](/img/7/b51/b41563e93b9c01c4b29edca24ea6.jpg)
![](/img/8/404/5d64127af013a03c53baf3a3e05e.jpg)
![](/img/6/725/c1562af6fc6a4f5c5bc39decc64f.jpg)
![](/img/b/612/c4624e075847aabc0bfcfc58ed83.jpg)
![](/img/6/135/d5c962b557b21ceb5a9d56909fab.jpg)
![](/img/6/ebf/692680f687e639d496dad551b882.jpg)
![](/img/6/0dc/b7adc0d1e51e71a24bec1ba3c43f.jpg)
![](/img/b/038/7b3a73657d2223d5ff71330fd3e8.jpg)
![](/img/7/748/f7b311f0e517a6eb2aae5400b157.jpg)
![](/img/b/096/1c0d9f0cb5de38fb81841278bba5.jpg)
證明
![](/img/5/da3/4cf5fbdbb37941908d7cc4094d73.jpg)
![](/img/e/25b/0441823209c010b1c33fa66a6345.jpg)
![](/img/1/0ba/f5c3d81cf3a4e8aafad2d45997aa.jpg)
![](/img/3/c38/5db59a3dafce876f7cf3f32a43f7.jpg)
![](/img/2/f67/bdea6c156af8871dac5bf261c9f8.jpg)
![](/img/1/471/515a99857873d8785409f4a816ac.jpg)
算法描述
![](/img/0/3fa/e001a856caead270b60bf6c0a76b.jpg)
![](/img/2/161/fbbc412b4b3a740d6921f8e26316.jpg)
![](/img/c/9eb/cdd24c832ac5ced4ddf3c14d62b3.jpg)
![](/img/f/06e/82376ab8f6f59eba91a0af606702.jpg)
![輾轉相除法 輾轉相除法](/img/9/201/nBnauImYhZmNkZDOihTMhFDMkhjNlVDZwUjYyMzNlJDZlFGN0IWYkF2N3MzLtVGdp9yYpB3LltWahJ2Lt92YuUHZpFmYuMmczdWbp9yL6MHc0RHa.jpg)
function gcd(a,b) {if b< >0 return gcd(b,a mod b);else return a;}
示例
例1
a | b | a mod b |
123456 | 7890 | 5106 |
7890 | 5106 | 2784 |
5106 | 2784 | 2322 |
2784 | 2322 | 462 |
2322 | 462 | 12 |
462 | 12 | 6 |
12 | 6 | 0 |
例2
![](/img/e/498/d09bbd89978abf6c0ed1c702cae5.jpg)
![](/img/8/d33/1c0e0ab1d50396b6fc475962bf51.jpg)
![](/img/e/59c/80b847e041f08a2f3a79c514b078.jpg)
![](/img/4/718/d55e5311ee94636ec9689ab6c74b.jpg)
![](/img/b/6c0/c0f31fb45a98ced08b0dc67cb534.jpg)
![](/img/9/90c/31a5286f038f95bee09ab6442c6d.jpg)
![](/img/b/386/71c6ee8253a49788de8069717dc2.jpg)
![](/img/6/e68/c606293b6bb03e1b4dc0bdf321ec.jpg)
![](/img/8/120/9b5b5164c11a9b5bacae3afae80e.jpg)
![](/img/4/5e5/226446fd66bab6e04d0dfd9249ba.jpg)
![](/img/a/2f7/fd5ea7ab738ca00f12be23118de2.jpg)
![](/img/0/92d/9ada83057e091a72fba2cee2f91f.jpg)
![](/img/3/cb4/8f3bdd69ecf4f7e72e24b0f37e13.jpg)
![](/img/4/db5/603a8712db76ae05cc0cb0432bfa.jpg)
![](/img/d/fb3/2b784537c2829fa4eed654cf2a70.jpg)
![](/img/1/b49/0c5cfea4699cee40fb1fdb01a597.jpg)
![](/img/9/269/a65e5eab63a1b2409e42429969af.jpg)
![](/img/0/725/124b989c13db9075a65d9948b3dc.jpg)
![](/img/2/dfb/50003c8ff0559f48b108727db436.jpg)
![](/img/e/498/d09bbd89978abf6c0ed1c702cae5.jpg)
代碼實現
c語言
int GCD(int a,int b){ return b==0?a:GCD(b,a%b);}
C++語言實現
#include<iostream>using namespace std;int a , b , a1 , b2 , l;int gcd(int x , int y){ if(!y) return x;else return gcd(y , x%y); }int main(){cout << "請輸入兩個正整數,計算它們的最大公約數" << endl ;int a , b , ans;cin >> a >> b;if(a > b)ans = gcd(a , b);else ans = gcd(b , a);cout << ans;return 0;}
C#語言實現
static int sucDivison(int m, int n) /*除法*/{ int remainder = 0; if (m % n == 0) { return n; } else { do { remainder = m % n; m = n; n = remainder; } while (remainder > 0); } if (n == 0) { return m; } return n; }
Basic實現
INPUT m,n DO r=m MOD nm=nn=rLOOP UNTIL r=0PRINT mEND
Pascal實現
function gcd(a,b:integer):integer;begin if b=0 then gcd:=a else gcd:=gcd(b,a mod b);end;
Java 實現
public static int gcd(int m, int n) { while (true) { if ((m = m % n) == 0) return n; if ((n = n % m) == 0) return m;}}
Python實現
#遞歸解決最大公約數問題def gcd(x , y): if y == 0 return x else gcd(y, x%y) x = int(input('請輸入第一個數字:'))y = int(input('請輸入第二個數字:'))print('%d 和 %d 的最大公約數為:' %(x,y),gcd(x,y))#非遞歸def gcd(x, y): while y: x, y = y, x%y return x