辗转相除法

97 阅读1分钟

算法思路

  1. m和n, m % n = 0, 则n = gcd(m, n)
  2. m % n = c.. r 则 x = gcd(n, r)

原理

假设m = 8, n = 4 最大公约数为4, 表示8可以拆成4的倍数 假设 m = 8,n = 3, 则 m = 2 * n + 2 =》 求gcd(3, 2) m = 8, n = 5, 则 m = 1 * n + 3 => 求 gcd(5, 3) m = 12, n =8, 则 m = 1 * n + 4 => 求gcd(8,4) =>4

模板

其中要保证a >= b 大数除小数

public int gcd(int a, int b) {
    if (a % b == 0) return b;
    return gcd(b, a % b);
}

题目

leetcode.cn/problems/x-…