算法學習記錄——求兩個整數的最大公約數(java)

**

算法學習筆記

**

//求兩個整數的最大公約數
public class GreatestCommonDivisor {

	//求最大公約數方法theGCD(a,b);利用遞歸調用
	//結合了  輾轉相除法 和 更相減損術 的各自的優勢,同時利用了  移位   運算(a>>1-->a後移1位,即除以2   ////  a<<1-->a前移1位,即乘以2)
	//還用到了 按位 與 (&)運算,例如  a&b : a和b先轉爲 補碼,然後再 按位 進行 與(&)運算。   a&1==0,說明a爲偶數,  a&1!=0,說明a爲奇數。
	public static int theGCD(int a, int b) {
		if(a==b) {
			return a;
		}
		
		//a,b全爲偶數
		if((a&1)==0 && (b&1)==0) {
			return theGCD(a>>1, b>>1)<<1;
		}
		//a爲奇數,b爲偶數
		else if((a&1)!=0 && (b&1)==0) {
			return theGCD(a, b>>1);
		}
		//a爲偶數,b爲奇數
		else if((a&1)==0 && (b&1)!=0) {
			return theGCD(a>>1, b);
		}
		//a,b全爲奇數
		else {
			int big=a>b?a:b;
			int small=a<b?a:b;
			return theGCD(big-small,small);
		}
		
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		GreatestCommonDivisor gcd=new GreatestCommonDivisor();
		System.out.println(gcd.theGCD(25, 80));
		System.out.println(gcd.theGCD(348, 60));
		System.out.println(gcd.theGCD(240, 40));
		System.out.println(gcd.theGCD(100, 80));
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章