Algo148 算法训练 5-1最小公倍数
题目就不贴了,就是求两个数的最小公倍数,最小公倍数就是都能除净这两个数,并且是最小的(0不算)。比如3和5的最小公倍数就是15
两种方法,一种无脑暴力模拟法,78ms
import java.util.Scanner;
/**
* @Description: 算法训练 5-1最小公倍数
* @ClassName: Algo148
* @author: fan.yang
* @date: 2020/07/18 17:31
*/
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long n = scanner.nextLong();
long m = scanner.nextLong();
//这个主要为了下面的循环 如果n=65535 m=1,我不写这个就要循环65535次,而我写了这个只需要1次。
if(n > m){
long t = m;
m = n;
n = t;
}
for(int i = 1;i <= n;i++){
if((m * i) % n == 0){
System.out.println(m * i);
break;
}
}
}
}
公式递归法,其实是通过最大公约数来求的最小公倍数,gcd代表求最大公约数的函数(辗转相除法),两个数相乘其实是等于这两数最大公约数和最小公倍数相乘的,所以就有了下列的写法,78ms
import java.util.Scanner;
/**
* @Description: 算法训练 5-1最小公倍数
* @ClassName: Algo148
* @author: fan.yang
* @date: 2020/07/18 17:31
*/
public class Main {
/**
* 公式递归法
*/
public static int gcd(int n , int m) {
return m == 0 ? n : gcd(m ,n % m);
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
System.out.println(n * m / gcd(n , m));
}
}