package cn.LanQiaoBeiAlgorithm.Ravanla;
public class Max_GongYueShu {
public static void main(String[] args) {
// int a = 15;
// int b = 40;
// //最大公约数
// //从两数中较小的数开始,找出能整除本数的又能整除较大的数的数为最大公约数
// //最大公约数为1的话,这两数称为质数
// for(int i = a; i >= 1; i--) {
// if(a%i == 0 && b%i == 0) {
// System.out.println(i);
// break;
// }
// }
//辗转相除法求最大公约数
// a = ka*i + a1;
// b = kb*i + b1;
// (a + b)%i = ((ka + kb)*i + (a1 + b1))%i
//
// [a, b]--->[b-a, a]--->[b-a-a, a]--->...[b%a, a]--->
// a = ka * i;
// b = kb * i;
// (b - a) = (kb - ka) * i;
// [15,40]--->[10,15]--->[5,10]--->[0,5]
int a = 15;
int b = 40;
for(;;) {
if(a == 0) {
System.out.println(b);
break;
}
int t = a;
a = b%a;
b = t;
}
int c = 15;
int d = 40;
System.out.println(gcd(c,d));//最大公约数
System.out.println(lcm(c,d,1));//最小公倍数
}
// 求最小公倍数
// a = ka * i;
// b = kb * i;
// a*b = ka*kb * i * i;
private static int lcm(int c, int d, int i) {
if(d%c==0)return d;
if(i == c)return d;
i++;
return lcm(c, d*(i+1), i);
// i++;
// return lcm(c, d*(i), i);//这样又是另一个答案
// return lcm(c, d*(i+1), ++i);//这样是错的
}
// 最大公约数
private static int gcd(int c, int d) {
if(c == 0) return d;
return gcd(d%c, c);
}
}