最大公约数
约 8 分钟
两个正整数的最大公约数(GCD,Greatest Common Divisor),是能同时整除它们的最大的数。比如 12 和 18,公约数有 1、2、3、6,最大的是 6,记作 。
最直白的办法是从小到大试,把能同时整除两数的都记下来取最大:
int gcd(int a, int b) {
int g = 1;
for (int i = 1; i <= min(a, b); i++)
if (a % i == 0 && b % i == 0) g = i;
return g;
}
这样要循环到 ,复杂度 ,两数很大时会慢。
坑:约数一定不超过两数里较小的那个,所以循环上界取 ,别写成 白白多跑;还要注意 或 为 0 的特殊情况。下一节会学一个快得多的巧办法——辗转相除法,几乎瞬间出结果。
小纸条
8 和 12 的最大公约数是几?
登录 后可看答案