欧几里得算法(辗转相除)&扩展欧几里得

本文详细介绍了欧几里得算法及其扩展版本用于计算最大公约数的方法,并展示了如何利用这些算法来解决二元一次方程的整数解问题。文章还提供了具体的实现代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

欧几里得算法是用来计算两个数的最大公约数;

int GCD(int a, int b)//注意此处a>b;
{
    return b==0?a:gcd(b, a%b);
}

应用:

一:最常见的,用来求最小公倍数(LCM);

        LCM=a/GCD(a, b)*b;

二:扩展欧几里得算法, 求二元一次方程(a*x+b*y=c)的解;

二元一次方程性质:(a*x+b*y=c)有解(整数解)的充要条件:c|gcd(a, b)(c是a, b的最大公约数的倍数);

int exgcd(int a, int b, int &x, int &y)
{
    if(b==0){
        x=1;
        y=0;
        return a;
    }
    int r=exgcd(b, a%b, x, y);
    int t=x;
    x=y;
    y=t-a/b*y;
    return r;
}

r表示a, b的最大公约数; x, y为c=gcd(a, b)时的一个解;

a/=r, b/=r;

x+=k*b, y-=k*a(k∈Z)是c=r的通解;

d=gcd(a, b);

则a*x+b*y=c的特解:x*=d, y*=d;

a/=r, b/=r;

则通解:x+=k*b, y-=k*a(k∈Z)







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值