用Java實現最大公約數與最小公倍數
阿新 • • 發佈:2019-02-15
使用輾轉相除法可以快速的實現求最大公約數,而最小公倍數可以通過最大公約數求出。那麼輾轉相除法的原理是什麼呢? 輾轉相除法,又名歐幾里德演算法,是已知最古老的演算法,其可追溯至公元前300年前。設兩數為a、b(a>b),用gcd(a,b)表示a,b的最大公約數,r=a(mod b) 為a除以b的餘數,k為a除以b的商,即a÷b=k...r。輾轉相除法即是要證明gcd(a,b)=gcd(b,r)。 證明如下: 1.令c=gcd(a,b)=gcd(b,r),則設a=mc,b=nc,那麼r= a-kb = (m-kn)c,由此可知,c也是r的因數; 2.因為c是a與b的最大公約數,所以m與n互質,若要證明c也是b與r的最大公約數,那麼n與(m-kn)也必須互質。 3.用反證法證明n與(m-kn)互質。若n與(m-kn)存在最大公約數d,那麼n = xd,(m-kn) = yd(d > 1),則m = yd+kn = (y+kx)d。從而可以推出m與n存在因數,並不互質,與條件相矛盾。所以n與(m-kn)互質。 4.得到c=gcd(b,r),從而gcd(a,b)=gcd(b,r)。
**根據輾轉相除法用Java實現最大公約數和最小公倍數:**
//最大公約數
public int max(int m, int n){
if(m < n){ //保證m>n
int temp = n;
n = m;
m = temp;
}
if(m%n == 0){
return n;
}
return max(n,m%n);
}
//最小公倍數
public int min(int m, int n){
return m*n/max(m,n);
}