最大公约数
什么是最大公约数?
最大公约数(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即为最大公约数
求两个整数最大公约数主要的方法:
1.穷举法:分别列出两整数的所有约数,并找出最大的公约数。
2.素因数分解:分别列出两数的素因数分解式,并计算共同项的乘积。
3.短除法:两数除以其共同素因数,直到两数互素时,所有除数的乘积即为最大公约数。
4.辗转相除法:两数相除,取余数重复进行相除,直到余数为0时,前一个除数即为最大公约数。
————————————————
gcd函数写法
由于Java语言中没有像C++那样内置的gcd库函数,导致我做算法题很郁闷,于是总结了一下。
通过下述方法,我们可以轻松实现gcd功能。
- while循环(常速)
此段代码a、b可以为0。
public static int gcd(int a, int b) {
while (b != 0) {
int temp = a % b;
a = b;
b = temp;
}
return a;
}
- 递归法(较快)
2. 此段代码a、b可以为0。
public