package com.wy;
import java.util.Scanner;
/**
* @author HelloWorld
* @create 2021-04-06-9:22
* @email 154803771@qq.com
*/
public class MaxDivisor {
// 最大公约数
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Input x: ");
int x = scanner.nextInt();
System.out.println("Input y: ");
int y = scanner.nextInt();
int min = x > y ? y : x;
int maxDivisor = 1;
// 暴力
for (int i = 1; i <= min; i++) {
if (x % i == 0 && y % i == 0 && maxDivisor < i) {
maxDivisor = i;
}
}
System.out.println("暴力");
System.out.println(maxDivisor);
// 辗转相除
System.out.println("辗转相除(递归实现)");
System.out.println(divisionAndDivision (x, y));
// 更相减损术
System.out.println("更相减损术(递归实现)");
System.out.println(subAndSub(x, y));
}
/**
* 辗转相除
* 对于 30 和 18
* 30 / 18 = 1...12
* 取 18 和 12 再次 取余
* 每次对 被除数 和 余数 辗转相除
* 直到余数为0
*/
public static int divisionAndDivision (int x, int y) {
int max = Math.max(x, y);
int min = Math.min(x, y);
// 取余
x = max % min;
if (x == 0) {
return min;
} else {
// 对余数 和 被除数 辗转相除
return divisionAndDivision(x, min);
}
}
/**
* 更相减损术
* 每次对被减数和差 更相相减
* 直到 被减数和差相等
*/
public static int subAndSub(int x, int y) {
int max = x > y ? x : y;
int min = x < y ? x : y;
x = max - min;
if (x == min) {
return min;
} else {
return subAndSub(x, min);
}
}
}