最小公倍数与最大公约数

最小公倍数与最大公约数`

include<iostream>           //辗转相除法效率最高,穷举法效率最低 
include<algorithm>           
using namespace std;
/*辗转相除法的思想在于不断地去除“杂志”,设两数为mk,nk,k为最大公约数。
第一次求余后所得为(m-n)k,显然(m-n)k小于mk与nk任一数。
x次运算后k的倍数化为一,即求得最大公倍数k。
同理,辗转相减法也是去除“杂质”的思想,不过效率相对较低。
穷举法,就是逐步模拟,效率最低。 */
void a()        //辗转相除法求最大公约数 
{
    unsigned long long a,b,c,m,n;       cin >> a >> b;
    m = a;  n = b;
    if(a < b)       swap(a,b);
    while(b != 0)
    {
        c = a % b;
        a = b;
        b = c;
    }
    cout << a << endl;
    lcd(m,n,a);
}
unsigned long long lcd(unsigned long long x,unsigned long long y,unsigned long long z)
{
    cout << x*y/z << endl;
}
//gcd经典写法 
/*int gcd(int x,int y)
{
    if(y==0)
        return x;
    else
    return gcd(y,x%y);
}*/
void b()        //辗转相减法求最大公约数 
{
    unsigned long long a,b,c,m,n;       cin >> a >> b;
    m = a;  n = b;
    if(a < b)       swap(a,b);
    while(a != b)
    {
        c = a - b;
        if(b > c)
        {
            a = b;
            b = c;
        }
        else
            a = c;
    }
    cout << a << endl;
}
void c()        //穷举法 
{
    unsigned long long a,b,c;       cin >> a >> b;
    c = min(a,b);
    for(;;c--)
        if(a % c == 0 && b % c == 0)
            break;
    cout << c << endl;
}
int main()
{
    a();//b();c();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值