基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
输入2个正整数A,B,求A与B的最小公倍数。
Input
2个数A,B,中间用空格隔开。(1<= A,B <= 10^9)
Output
输出A与B的最小公倍数。
Input示例
30 105
Output示例
210
求最小公倍数,有两种方式,一个是利用公式,两个数的乘积等于其最大公约数乘以最小公倍数,先求出最大公约数,利用前一篇博客里GCD的那个。第二种方法就是,质因子之积。我采用的方法是第一个。只需要注意数据不要爆就可以啦。写了俩函数。
#include"cstdio"
#include"cstring"
#include"cmath"
#include"algorithm"
using namespace std;
long long int GCD(long long int a,long long int b)
{
return b==0?a:GCD(b,a%b);
}
long long LCM(long long int a,long long int b)
{
return (a*b/GCD(a,b));
}
int main()
{
int a,b;
scanf("%d %d",&a,&b);
printf("%I64d\n",LCM(a,b));
return 0;
}
我搜了一下网上其他人的代码,有的是利用迭代,先算出来最大公约数,最终只需要写一个函数就可以了。这个也挺好的。但我觉得写俩的反而更好,因为做其他题可能这俩都用得上,都写上吧。最后附上迭代求最小公倍数的代码;
#include"cstdio"
#include"cstring"
#include"cmath"
#include"algorithm"
using namespace std;
long long LCM(long long int a,long long int b)
{
long long int temp;
long long int n=a;
long long int m=b;
for(;;)
{
if(b==0)
return m*n/a;
else {
temp=b;
b=a%b;
a=temp;
}
}
}
int main()
{
int a,b;
scanf("%d %d",&a,&b);
printf("%I64d\n",LCM(a,b));
return 0;
}