题解 | #求最小公倍数#
求最小公倍数
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,较小数就是最大公约数 }