题解 | #求最小公倍数#
求最小公倍数
https://www.nowcoder.com/practice/22948c2cad484e0291350abad86136c3
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String a;
try {
a = in.readLine();
in.close();
} catch (IOException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
int[] num = new int[2];
int k, numA, numB;
parse(a, num);
if (num[0] > num[1]) {
numA = num[0];
numB = num[1];
} else {
numA = num[1];
numB = num[0];
}
k = maxCommDiv(numA, numB);
System.out.print(numA * numB / k + "\n");
}
static void parse(String a, int[] num) {
int i = 0, l = a.length(), n = 0;
char[] chrAy = new char[l];
a.getChars(0, l, chrAy, 0);
while (i < l) {
if (chrAy[i] == ' ') {
num[0] = n;
n = 0;
} else {
n *= 10;
n += chrAy[i] - '0';
}
i++;
}
num[1] = n;
}
static int maxCommDiv(int x, int y) {
int k = 0;
if (y == 0)
k = x;
else
k = maxCommDiv(y, x % y);
return k;
}
// a和b的最大公约数是k,则a=ik,b=jk,且i和j中已经没有公因子,i>j
// a/b=ki/kj=i/j=(jm+n)/j=m+n/j,m是正整数,n/j是真分数,n<j
// a=b(m+n/j)=jk(m+n/j)=jkm+kn=bm+kn,kn<kj=b
// a%b=kn<b,b=jk,所以b=jk和a%b=nk的最大公约数k,与a和b的最大公约数相等
// gcb(x,y)中,保证大数在前,因为a>b,b>a%b,所以分别将a和b放在前面
// 当n=1时,x=jk,y=1*k=k,较小数就是最大公约数
}
查看4道真题和解析