1. 程式人生 > >四行程式碼求最大公約數(歐幾里得演算法)

四行程式碼求最大公約數(歐幾里得演算法)

本文要介紹的不是普通的歐幾里德演算法(輾轉相除法),而是利用位操作實現的歐幾里得演算法。
利用位操作實現歐幾里得演算法主要有以下兩個優點:1.程式碼量少  2.效率高。

首先,歐幾里德演算法求最大公約數的做法是:
⒈ 令r為a/b所得餘數(0 <= r < b) 若 r= 0,演算法結束;b 即為答案。
⒉ 互換:置 a←b,b←r,並返回第一步。

int gcd(int a, int b){
    while(b^=a^=b^=a%=b);
    return a;
}

b^=a^=b^=a%=b
可以分解成以下四句
a=a%b;
b=b^a;
a=a^b;
b=b^a;

第一句用a存餘數,剩下三句交換a,b,再配合while判斷此時b是否為0,不為0則繼續迴圈。
另外,不用擔心a,b誰大誰小的問題,如果a < b,那麼,在第一輪迴圈中便可將兩者換回來