package basic.alg;
/**
* 求两个数的最大公约数
*
* */
public class GCD {
public static int gcd(int p, int q) {
int tp = p;
int tq = q;
int r = q; //这里要初始化为q
if (q > p) {
r = p;
p = q;
q = r;
}
while (r > 0) {
r = p % q;
p = q;
q = r;
}
if (p == 1) {
throw new RuntimeException(tp + " 和 " + tq + "没有最大公约数");
}
return p;
}
public static void main(String[] args) {
int p1 = 100, q1 = 52;
int p2 = 8, q2 = 11;
System.out.println(p1 + ", " + q1 + "最大公约数: " + gcd(p1, q1));
System.out.println(p2 + ", " + q2 + "最大公约数: " + gcd(p2, q2));
}
}
使用欧几里德的求最大公约数的方法。求 p, q 的最大公约数等于求 q 和 ( p % q ) 的最大公约数。