求最小公倍数
题目来源
牛客网:求最小公倍数
题目描述
正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
数据范围:1≤a,b≤100000
输入描述
输入两个正整数A和B。
输出描述
输出A和B的最小公倍数。
示例1
输入
5 7
输出
35
示例2
输入
2 4
输出
4
思路分析
解法一
- 暴力求解
- 从1开始与两数中较小的数相乘,找到能整除较大数的第一个乘积,这个数便是最小公倍数
解法二
- 求最小公约数
- 根据最小公倍数的公式,最小公倍数=两数乘积/最大公约数
- 通过辗转相除法得到两数的最大公约数
辗转相除法:又叫欧几里得算法,用于计算两个非负整数a和b的最大公约数,设a、b两个数的最大公约数为n,则ka+b,b的公约数也为n。以除数和余数反复作除法运算,当余数为0时,当前的除数就是最大公约数。参考文章:辗转相除法求最大公约数
代码展示
解法一
#include<iostream>
using namespace std;
int main() {
int a, b;
while (cin >> a >> b)
{
int x = max(a, b);
int n = min(a, b);
long long mul;
for (int i = 1; i <= x; i++)
{
mul = n * i;
if (mul % x == 0)
{
break;
}
}
cout << mul << endl;
}
}
解法二
#include<iostream>
using namespace std;
int Gcd(int a, int b)
{
int temp = 0;
while (temp)
{
//无论a大还是b大,经过一轮循环后,a都比b大
//如果a比b大,那么取模得到的是一个较小的数字,把这个数赋给b后,a一定比b大
//如果b比a大,那么第一轮循环会将较大的数赋值给a,取模得到的数字便是a本身,相当于将两个数进行了交换
temp=a%b;
a = b;
b = temp;
}
return a;
}
int main() {
int a, b;
while (cin >> a >> b)
{
cout << a * b / Gcd(a, b);
}
}