最大公约数gcd的通俗理解和Java代码的实现

2023-12-13 05:38:42

什么是最大公约数

最大公约数(Greatest CommonDivisor,简称GCD)是指两个或多个整数共有的最大正因数,即能够同时整除这些数的最大的正整数。以两个整数为例,最大公约数表示这两个数最大的共有因数,也就是能够同时整除这两个数的最大整数。
例如,对于数字48和18,它们的最大公约数是6,因为6是48和18都能整除的最大整数。

最大公约数的计算

最大公约数(GCD)可以通过欧几里德算法(辗转相除法)来求解。算法的步骤如下:

  1. 用较大数除以较小数,得到商和余数。

    • 48除以18,商为2,余数为12。
  2. 将较小数替换为原来的较大数,将余数替换为原来的较小数。

    • 现在,将18替换为原来的12,将12替换为原来的18。
  3. 重复步骤1和2,直到余数为0。

    • 18除以12,商为1,余数为6。
    • 将12替换为6,将6替换为12。
    • 12除以6,商为2,余数为0。
    用数学理解以上描述
    48 % 18 =12
    18 % 12 = 6
    12 % 6 = 0
    6即为最大公约数
    

因此,通过欧几里德算法,我们可以求得48和18的最大公约数为6。

//代码表示最大公约数(GCD)求解
//48 % 18 =12
//18 % 12 = 6
//12 % 6 = 0
public static int gcd(int m, int n) {
        while (n != 0) { //出口
            int temp = m % n;
            m = n;
            n = temp;
        }
        return m; //这里之所以返回m是因为在最后一次计算中除数n的值被赋值给m了
    }

练习(找出数组的最大公约数)

练习找出数组的最大公约数

给你一个整数数组 nums ,返回数组中最大数和最小数的 最大公约数

两个数的 最大公约数 是能够被两个数整除的最大正整数。

示例 1:

输入:nums = [2,5,6,9,10]
输出:2
解释:
nums 中最小的数是 2
nums 中最大的数是 10
2 和 10 的最大公约数是 2

示例 2:

输入:nums = [7,5,6,8,3]
输出:1
解释:
nums 中最小的数是 3
nums 中最大的数是 8
3 和 8 的最大公约数是 1

示例 3:

输入:nums = [3,3]
输出:3
解释:
nums 中最小的数是 3
nums 中最大的数是 3
3 和 3 的最大公约数是 3
class Solution {
    public int findGCD(int[] nums) {
        int min = nums[0];
        int max = nums[0];
        for(int i = 1;i < nums.length;i++){
            if(nums[i] < min) min = nums[i];
            if(nums[i] > max) max = nums[i];
        }
        
        return gcd(max,min);
    }
    public static int gcd(int m, int n) {
        while (n != 0) {
            int temp = m % n;
            m = n;
            n = temp;
        }
        return m;
    }
}

文章来源:https://blog.csdn.net/m0_59167353/article/details/134952218
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。