Java求最大公约数(6种解法总结)

目录

主函数

1.暴力枚举法

2.辗转相除法

3.辗转相除法 ---递归调用

4.辗转相除法 ---递归调用---简化写法

5.调用函数递归 更相减损法

6.调用函数递归 更相减损法--简化


 

主函数

 public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        int gcd = gcd(a, b);
        System.out.println(gcd);

    }

1.暴力枚举法

    public static int gcd(int a, int b) {
        int min = a < b ? a : b;//判断并取出两个数中小的数
        for (int i = min; i >= 1; i--) { //循环,从最小值开始,依次递减,直到i=1
            if (a%i==0&&b%i==0){    //当i能同时被A和B余尽时,返回i
                return i;
            }
        }
        return 0;
    }

}

2.辗转相除法

 public static int gcd(int a, int b) {// 辗转相除法
        int c = a % b;   //先将a对b取余
        while (c != 0) {   //当余数不等于0时,一直进行循环,直到余数等于0,公约数就为b
            a = b;         //将a对b的余数再对b取余,直到循环结束
            b = c;
            c = a % b;
        }
        return b;
    }

3.辗转相除法 ---递归调用

    public static int gcd(int a, int b) {// 辗转相除法 改进,调用函数递归
        int max = a > b ? a : b; //求出大的数
        int min = a < b ? a : b; //求出小的数
        if(max%min==0){
            return min;      //当大数模小数能余尽时,最大公约数就是小的数
        }
        return gcd(max%min,min);//递归函数,参数去前两个数的余数,和小的数

4.辗转相除法 ---递归调用---简化写法

public static int gcd(int a, int b) {// 辗转相除法 改进,调用函数递归
        return (a % b == 0) ? b : gcd(a % b, b);// 相同思路,三元运算/简化写法
    }

5.调用函数递归 更相减损法

 public static int gcd(int a, int b) {//调用函数递归 更相减损法
        int max = a>b?a:b;
        int min = a

6.调用函数递归 更相减损法--简化

public static int gcd(int a, int b) {//调用函数递归 更相减损法--简化写法
        return (a%b==0)?b: gcd(a-b,b);//
    }
}

你可能感兴趣的:(java,算法,开发语言)