最大公约数
- 什么是最大公约数
- 最大公约数的计算
- 练习(找出数组的最大公约数)
什么是最大公约数
最大公约数(Greatest CommonDivisor,简称GCD)是指两个或多个整数共有的最大正因数,即能够同时整除这些数的最大的正整数。以两个整数为例,最大公约数表示这两个数最大的共有因数,也就是能够同时整除这两个数的最大整数。
例如,对于数字48和18,它们的最大公约数是6,因为6是48和18都能整除的最大整数。
最大公约数的计算
最大公约数(GCD)可以通过欧几里德算法(辗转相除法)来求解。算法的步骤如下:
用较大数除以较小数,得到商和余数。
- 48除以18,商为2,余数为12。
将较小数替换为原来的较大数,将余数替换为原来的较小数。
- 现在,将18替换为原来的12,将12替换为原来的18。
重复步骤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;}
}