/**
* 最大公约数
*/
public class MaxCommonNum {
public static void main(String[] args) {
// 9 与 3 的公约数
System.out.println(gcp2(3, 9));
}
/**
* 辗转相除法(欧几里得算法) 自然语言描述:
* 若q是0,则最大公约数为p。
* 否则,将p除以q得到余数r,p和q的最大公约数即为q和r的最大公约数。
*
* @param p
* @param q
* @return
*/
public static int gcp(int p, int q) {
if (q == 0) return p;
int r = p % q;
return gcp(q, r);
}
/**
* 更相减损法
*
* @param p
* @param q
* @return
*/
static int i = 0;
public static int gcp2(int p, int q) {
if ((p % 2) == 0 && (q % 2) == 0) {
p /= 2;
q /= 2;
i++;
return gcp2(p, q);
}
if (p < q) {
int t = p;
p = q;
q = t;
}
int r = p - q;
if (r == q) return i == 0 ? q : q * (2 * i);
return gcp2(q, r);
}
}
最大公约数
于 2023-07-13 00:47:46 首次发布