最小公倍数

最小公倍数(Least Common Multiple, LCM)是两个或多个整数共有的最小的正整数倍数。

题目描述

给定两个正整数 $a,b$,求他们的最小公倍数(lcm)。这两个整数均在 int 范围内。

输入格式

两个整数 $a$ 和 $b$,用空格分隔。

输出格式

一个整数表示答案。

样例输入

6 15

样例输出

30

求解方法

暴力求解法

首先选取lcm为两个数中较大的那个数,依次递增,第一个能整除两个数的lcm即为所求结果。

#include<iostream>
using namespace std;
int main(){
  int m,n;
  cin>>m>>n;
  int lcm=m>n?m:n;
  while(lcm%m!=0||lcm%n!=0){
    lcm++;
  }
  cout<<lcm;
  return 0;
}

公式法

假设m和n的最大公约数是gcd,则二者的最小公倍数lcm=(m×n)÷gcd 。


#include<iostream>
using namespace std;
int gcd(int m,int n){
 int r=m%n;
 while(r!=0){
   m=n;
   n=r;
   r=m%n;
 }
 return n;
}
int main(){
 int m,n;
 cin>>m>>n;
 int g=gcd(m,n);
 cout<<m*n/g;
 return 0;
}

短除法

短除法也是最小公约数求法篇中的一种方法,gcd=2×2×2×2,lcm=2×2×2×2×1×3。

#include<iostream>
using namespace std;
int main(){
  int m,n,gcd=1;
  cin>>m>>n;
  for(int i=2;i<=m&&i<=n;i++){
    while(m%i==0&&n%i==0){
      m=m/i;
      n=n/i;
      gcd=gcd*i;
    }
  }
  cout<<gcd*m*n;
  return 0;
}