51Nod1012 最小公倍数LCM

基准时间限制: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;  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值