问题描述
编写一函数lcm,求两个正整数的最小公倍数。
样例输入
一个满足题目要求的输入范例。
例:3 5
样例输出
与上面的样例输入对应的输出。
例:
数据规模和约定
输入数据中每一个数的范围。
例:两个数都小于65536。
代码演示
import java.util.Scanner;
/**
* 编写一函数lcm,求两个正整数的最小公倍数
*
* @author Clearlight
*
*/
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
sc.close();
System.out.println(a*b/f(a,b)); // 最小公倍数 = 两数相乘 / 最大公约数
}
/**
* 使用递归进行求解
*
* @param a 输入的数
* @param b 输入的数
* @return 返回两个数的最大公约数
*/
public static int f(int a, int b) {
if(a%b == 0) {
return b;
}
return f(b,a%b);
}
}
代码分析
递归的思想应用 : 辗转相除法
找重复:a/b=c...a%b
b/(a%b)=d...b%(a%b)
...
第一项为:f函数的第二项的值
第二项为:f函数的第一项对第二项的模
找变化:变化的值应该作为参数(a和b一直在变化)
找边界:出口(当a%b=0时,返回b即为最大公约数