【每日一题】 求最小公倍数
链接: link
两种方法
1.暴力求解法
从两个数中较大的那个开始,逐个进行判断,能够被两个数整除,第一个便是最小公倍数
代码如下
#include <iostream>
using namespace std;
int main() {
int a,b;
while(cin>>a>>b)
{
int c = max(a,b);
while(1)
{
if(c % a == 0 && c % b == 0)
{
cout<<c<<endl;
break;
}
c++;
}
}
return 0;
}
由此可见,这类方法太耗时间,那么便有了下面的解法
2.更优解法(根据最大公约数进行推算)
首先,先说明最小公倍数与最大公约数之间的关系
最小公倍数 == 两个数的乘积/最大公约数
其次,我们来谈谈最大公约数的计算,计算它我们可以用到辗转相除法,那么什么是辗转相除法呢?下面我们举个简单的例子:
比如计算9和6的最大公约数,我们先用9%6 = 3,再用6%3 = 0,当两个值的余数为0时,如上例所示对应的3就是两个数的最大公约数
那么如何求最大公约数的代码呢?
如下代码:
int gcd(int a,int b)
{
int c;
while((c = a%b))
{
a = b;
b = c;
}
return b;
}
结合之前的公式,那么最小公倍数的代码片段如下所示:
#include <iostream>
using namespace std;
//最小公倍数 = 两数的乘积/最大公约数
//辗转相除法求最大公约数
int gcd(int a,int b)
{
int c;
while((c = a%b))
{
a = b;
b = c;
}
return b;
}
int main() {
int a,b;
while(cin>>a>>b)
{
int c = gcd(a,b);
cout<<(a*b)/c<<endl;
}
return 0;
}
以上运行结果就明显比暴力求解法快了很多。