1. 程式人生 > >求最大公約數-輾轉相除法(Java)

求最大公約數-輾轉相除法(Java)

言: 求最大公約數的演算法有很多,有更相減損法,輾轉相除法等,但是較易用演算法實現的,且效率相對較高的就是輾轉相除法了。以下介紹用Java實現輾轉相除法,記錄學習通時也當作分享。 原理: 兩個數的最大公約數是指能同時整除它們的最大正整數。 設兩數為a、b(a≥b),求a和b最大公約數    的步驟如下: (1)用a除以b(a≥b),得    。 (2)若    ,則    ; (3)若    ,則再用b除以    ,得    . (4)若    ,則    ;若    ,則繼續用    除以    ,......,如此下去,直到能整除為止。 其最後一個餘數為0的除數即為    的最大公約數。 例:用輾轉相除法求(80,25)的最大公約數
80÷25=3......5 25÷5=5......0//餘數為零,最大公約數為等式中的除數5 證明: 設兩數為a、b(a>b),用    表示a,b的最大公約數,r=a (mod b) 為a除以b的餘數,k為a除以b的商,即    。輾轉相除法即是要證明    。 第一步:令    ,則設   第二步:根據前提可知   第三步:根據第二步結果可知,    也是    的因數 第四步:可以斷定    與    互質(這裡用反證法進行證明:設    ,則    ,則    ,則a與b的一個公約數    ,故c非a與b的最大公約數,與前面結論矛盾,則它們互質。又因b=nc,r=(m-kn)c,
因此c也是b與r的最大公約數)從而可知    ,繼而    Java演算法實現: 演算法實現:
public class zhanzhuan {
	int a;	//定義被除數
	int b;	//定義除數
	int f(int a,int b) {
		this.a=a;
		this.b=b;
		int c;
		if(a<b) {	//將a設為較大數
			c=a;
			a=b;
			b=c;
		}
		int r=a%b;
		while(r!=0) {		//輾轉相除
			a=b;
			b=r;
			r=a%b;
		}
		return b;		//b為最大公約數
	}
}

  呼叫:
class test{		//呼叫部分
	public static void main(String[] args) {
		zhanzhuan z = new zhanzhuan();
		z.a=98;
		z.b=26;
		System.out.println(z.a+"和"+z.b+"兩數的最大公約數是:"+z.f(z.a, z.b));
	}
}
  結果: