前言
求最大公约数,是比较常见的算法,下面总结几种常用的方法
一、四种方法
1.暴力枚举
无脑流,最为简单粗暴,也是最容易想到的一种方法
public static int gcd(int a, int b) {
// 暴力枚举
int min = a < b ? a : b;
for (int i = min; i >= 1; i--) {
if (a % i == 0 && b % i == 0)
return i;
}
return 0;
}
输入参数a和b,返回a和b的最大公约数
2.辗转相除法
递归调用函数,来找到最大公约数,比暴力枚举的速度要快
public static int gcd(int a, int b) {
// 辗转相除法
int max = a > b ? a : b;
int min = a < b ? a : b;
if (max % min == 0)
return min;
return gcd(max % min, min);
}
3.更相减损法
public static int gcd(int a, int b) {
// 更相减损法,与辗转相除法一样,但使用了更高效的减法来代替取余
int max = a > b ? a : b;
int min = a < b ? a : b;
if (max % min == 0)
return min;
return gcd(max - min, min);
}
4.简化的辗转相除法
public static int gcd(int a, int b) {
return (a % b == 0) ? b : gcd(b, a % b);
}