想了解更多算法題,可以關注微信公衆號“數據結構和算法”,每天一題爲你精彩解答。
1,歐幾里得算法求最大公約數
1 public static int gcd1(int num1, int num2) {
2 int temp = num1 % num2;
3 while (temp != 0) {
4 num1 = num2;
5 num2 = temp;
6 temp = num1 % num2;
7 }
8 return num2;
9 }
2,還可以從num1和num2的最小值找起,一直往下減,直到找到爲止
1 public static int gcd2(int num1, int num2) {
2 int temp = Math.min(num1, num2);
3 while (true) {
4 if (num1 % temp == 0 && num2 % temp == 0)
5 break;
6 else
7 temp--;
8 }
9 return temp;
10 }
11
12 public static int gcd2_1(int num1, int num2) {
13 int temp = Math.min(num1, num2);
14 while (num1 % temp != 0 || num2 % temp != 0) {
15 temp--;
16 }
17 return temp;
18 }
3,還可以輾轉相減求得
1 public static int gcd3(int num1, int num2) {
2 while (true) {
3 if (num1 > num2)
4 num1 -= num2;
5 else if (num1 < num2)
6 num2 -= num1;
7 else
8 return num1;
9 }
10 }
4,還可以使用遞歸的方式
1 public static int gcd4(int a, int b) {
2 if (a % b == 0)
3 return b;
4 return gcd4(b, a % b);
5 }