题目描述
输入正整数n,m,编写程序计算n和m的最小公倍数。
输入
一行两个空格隔开的正整数n,m。
输出
输出n和m的最小公倍数。
样例输入
12 18
样例输出
36
数据范围限制
1<=n,m<=10^6
思路:
本题较简单,有两种解法,一种是最简单的暴力解法,从1枚举到n*m,判断是否是最小公倍数;第二种则是应用欧几里得算法,先求出最大公约数,最小公倍数则为n / 最大公约数 * m / 最大公约数 * 最大公约数。
代码如下:
代码一(暴力解法):
#include<bits/stdc++.h>
using namespace std;
int main() {
long long m,n;
long long a;
cin>>n>>m;
for(long long i=1;i<=m*n;i++){
if(i%n==0&&i%m==0){
cout<<i;
break;
}
}
return 0;
}
代码二(欧几里得算法):
#include<bits/stdc++.h>
using namespace std;
long long gcd(long long n,long long m){
if(m==0) return n;
return gcd(m,n%m);
}
int main(){
long long n,m;
cin>>n>>m;
cout<<n/gcd(n,m)*m; //cout<<n/gcd(n,m)*m/gcd(n,m)*gcd(n,m)
return 0;
}