1.公约数、最大公约数的定义
- 公约数,亦称“公因数”。它是指能同时整除几个整数的数 。
- 如果一个整数同时是几个整数的约数,称这个整数为它们的“公约数”。
- 公约数中最大的称为最大公约数。
- 对任意的若干个正整数,1总是它们的公因数。
- eg.30和40,它们的公约数有1,2,5,10,最大公约数是10。
Tips:任何数和 0 的最大公约数都是自身。
2.欧几里得算法实现步骤
最大公约数(Greatest Common Divisor, GCD)
- 设两个整数
a
和b
,其中a >= b
。它们的最大公约数gcd(a, b)
可以通过以下步骤求解:- 首先计算
a
除以b
的余数,记作r = a % b
。 - 若
r
等于 0,则gcd(a, b) = b
。 - 若
r
不等于 0,则继续用(b, r)
替代(a, b)
,重复上述步骤,直到余数r
等于 0。
- 首先计算
时间复杂度 O(log(min(a, b)))
。
3.示例
gcd(a,b)=gcd(b,a%b)
计算 gcd(48, 18)
:
- 初始调用:
gcd(48, 18)
- 第一步:计算余数
48 % 18 = 12
,得到gcd(18, 12)
- 第二步:计算余数
18 % 12 = 6
,得到gcd(12, 6)
- 第三步:计算余数
12 % 6 = 0
,此时r = 0
,返回b = 6
所以,gcd(48, 18) = 6
。
4.实操练习
1979.找出数组的最大公约数
2427.公因子的数目
5.几种GCD代码实现
private int gcd(int a, int b) {while (a != 0) {int tmp = a;a = b % a;b = tmp;}return b;}
private int gcd(int a, int b) {return b == 0 ? a : gcd(b, a % b);}
public int gcd(int x,int y){if(y==0){return x;}return gcd(y,x%y);}