欧几里德算法(Euclidean algorithm)

来源:互联网 发布:c语言二进制转 bcd码 编辑:程序博客网 时间:2024/06/16 10:31
欧几里德算法(Euclidean algorithm) 
    又名辗转相除法, 是求两个正整数之最大公因子的算法。它是已知最古老的算法, 可追溯至公元前300年。它首次出现于欧几里德的《几何原本》中,而在中国则可以追溯至东汉出现的《九章算术》。它并不需要把二数作质因子分解。
    看到过许多欧几里德算法的实现,但是下面即将给出的这个算法是个人感觉最好的一个实现。

    //注意:这里不用考虑m和n的大小问题。
    int euclid(int m, int n)
    {
        int r;
        do{
            r = m % n;
            m = n;
            n = r; 
        }
        while(r!=0);
        return m;
    }

分析
①算法中不必考虑m与n的大小问题。当m<n时,第一次while循环将使m和n的值进行互换,以使m>n。
  例如:当m=4 n=10时,r = m%n = 4%10 = 4; m = n = 10; n = r = 4;(完成互换)
②当=120 n=90时:
  r = m%n = 120%90 = 30; m = n = 90; n = r = 30;   
  r = m%n = 90%30 = 0; m = n = 30; n = r = 0;(r等于0,返回m的值30)
③利用欧几里德算法,求出两个正整数的最大公因子后,即可轻松获得这两个正整数的最小公倍数:
  最小公倍数 = (正整数1 * 正整数2) / 最大公因子
0 0
原创粉丝点击