基础算法--最大公约数

最大公约数(Greatest Common Divisor,缩写为GCD)是指两个或多个整数共有的最大的约数。
这里用欧几里得算法实现求两个数的最大公约数。

欧几里得算法:两个整数a和b的最大公约数等于a除以b的余数c和b之间的最大公约数。

代码实现:

public static int gcd(int a, int b) {
        while (b != 0) {
            int temp = a % b;
            a = b;
            b = temp;
        }
        return a;
    }

时间复杂度为O(log(min(a, b)))

下面以计算 24 和 36 的最大公约数为例:

  1. 初始化 a = 36,b = 24。
  2. 因为 b 不等于 0,继续计算。
  3. 计算 36 除以 24 的余数得到 12。
  4. 将 b 的值 24 赋给 a,将余数 12 赋给 b。
  5. 现在 a = 24,b = 12。
  6. 因为 b 不等于 0,继续计算。
  7. 计算 24 除以 12 的余数得到 0。
  8. 将 b 的值 12 赋给 a,将余数 0 赋给 b。
  9. 现在 a = 12,b = 0。
  10. 因为 b 等于 0,停止计算。
  11. 返回最终的 a,即为最大公约数,此处为 12。

因此,24 和 36 的最大公约数为 12。

下面为求多个数的最大公约数

public class Main {
    public static void main(String[] args) {
        int[] numbers = {24, 36, 48, 60};
        int gcd = findGCD(numbers);
        System.out.println("最大公约数:" + gcd);
    }

    private static int findGCD(int[] numbers) {
        int result = numbers[0];
        for (int i = 1; i < numbers.length; i++) {
            result = findGCD(result, numbers[i]);
        }
        return result;
    }

    private static int findGCD(int a, int b) {
        if (b == 0) {
            return a;
        } else {
            return findGCD(b, a % b);
        }
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值