算法笔记 / A LEAF IN THE GARDEN
辗转相除
算法笔记 · 算法理论 / 数论。来自 Daily Learning 的学习笔记。
最大公约数
步骤
- 对 取余,得到余数 。
- 对 取余,得到余数
- 对 取余,得到余数
- 重复步骤 =
- 直到 为 0, 为答案
图解
设 - 为最大公约数d的长度
a = ------- (7d)
b = ----- (5d)
a %= b
a = -- (2d)
b = ----- (5d)
b %= a
a = -- (2d)
b = - (d)
a %= b
a = 0
b = - (d)
代码
int gcd(int a, int b) {
if (b == 0) return a;
return gcd(b, a % b);
}
最小公倍数
步骤
- 求出 和 的最大公约数 。
- 最小公倍数 等于 。
代码
int lcm(int a, int b) {
return a * b / gcd(a, b);
}