求最大公约数
- 例如 :36 和 60
60 = 36 * 1 + 24
将36和24分别前移
36 = 24 * 1 + 12
将24和12前移
24 = 12 * 2 + 0 - 用最小的正方形可以无缝隙地填满整个大长方形
此时余数为零,最大公约数为0
代码实现
//c++
int gcd(int a, int b)
{
if (!b)
return a;
return gcd(b, a % b);
}
#python
def gcd(a, b):
if (b == 0):
return a
return gcd(b, a % b)
//java
static int gcd(int a, int b)
{
if (b == 0)
return a;
return gcd(b, a % b);
}
扩展欧几里得算法
- 一定存在整数对(x, y) 使得ax + by = gcd(a, b)