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);}