最大公约数

2018-03-26  本文已影响0人  beautymo

循环取余法

假设a<b,i为最大公约数
a = ka*i 
b = kb*i 
b-a = (kb - ka)*i 则 b-a 也为i倍数,则此时b-a充当 a 的位置 , a 充当 b 的位置 

用循环算法如下:

    public static int f(int m, int n){
        int a = m > n ? m:n;  // 将m,n中大的值赋予a
        int b = m < n ? m:n;  // 将m,n中小的值赋予b
        while (b > 0){
            int temp = b;
            b = a%b;  // 此时b变为余数
            a = temp; // a是(a,b)中较大的数
        }
        return a;
    }

用递归如下:

    public static int f(int m,int n){
        int a = m > n ? m:n;  // 将m,n中大的值赋予a
        int b = m < n ? m:n;  // 将m,n中小的值赋予b
        if( b == 0 ) return a;
            return f(a%b,b);
    }
上一篇 下一篇

猜你喜欢

热点阅读