**
算法學習筆記
**
//求兩個整數的最大公約數
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));
}
}