1. 思路
两个数a,b的乘积等于两数的最大公约数x乘以最小公倍数y。
a * b = x * y
那么求解最小公倍数就可以从求解最大公约数开始。
最大公约数可以用辗转相除法来求解,其大致步骤如下:
先用小的一个数除大的一个数,得第一个余数; 再用第一个余数除小的一个数,得第二个余数; 又用第二个余数除第一个余数,得第三个余数; 这样逐次用后一个数去除前一个余数,直到余数是0为止.那么,最后一个除数就是所求的最大公约数(如果最后的除数是1,那么原来的两个数是互质数).
2. 代码实现
import java.util.Scanner; public class Main { /** * 采用递归的形式实现辗转相除法的算法 * @param a 整数a * @param b 整数b * @return a和b的最大公约数 */ private static int gcd(int a, int b) { if (a % b == 0) return b; return gcd(b, a % b); } public static void main(String[] args) { Scanner reader = new Scanner(System.in); while(reader.hasNext()){ int a = reader.nextInt(); int b = reader.nextInt(); System.out.println((a * b) / gcd(a, b)); } } }
C语言版本
#include <stdio.h> int gcd(int a, int b) { int temp; while (b) { temp = a % b; a = b; b = temp; } return a; } int main() { int a, b; scanf("%d %d", &a, &b); int res = (a * b) / gcd(a, b); printf("%d\n", res); return 0; }