扩展欧几里得

在此写下我对于扩展欧几里得的见解,可能有错误,评论区指正,我看到就会改
裴蜀定理推论:a,b互质的充要条件是存在整数x,y使ax+by=1,那么由a,b互质,一定存在x,y,满足等式ax+by=1
扩展欧几里德算法是用来在已知a, b求解一组x,y,使它们满足等式: ax+by=gcd(a,b)

朴素欧几里得算法: gcd(a,b)=gcd(b,a
步骤:
ax1+by1=gcd(a,b)
bx2+(a%b)y2=gcd(a,b)

gcd(a,b)xn+0yn=gcd(a,b)
此时一定存在一组解 xn=1,yn=0
然后需要以此回推,求出 x1,y1

ax1+by1=bx2+(a%b)y2
a 在计算机语言中可以表示为 aa/bb
原式可化为
ax1+by1=ay2+b(x2a/by2)
x1=y2
y1=x2a/by2
得到了回推公式,递归求解即可

实现:

void extend_gcd(int a,int b,int &x,int &y)
{
    if(b==0)
    {
        x=1;
        y=0;
        return;
    }
    else
    {
        extend_gcd(b,a%b,x,y);
        int tmp=x;
        x=y;
        y=tmp-a/b*y;
    }
}

注:方程有整数解(无穷多个)的充要条件是,a,b,互素,否则无整数解

如果让求解形如 ax+by=gcd(a,b)p ,同样也是有整数解的,因为这种式子可以转换为
axp+byp=gcd(a,b) ,此时得到的x和y,是原式的 1p 倍,乘p即可,但如果等号右边的系数不能整除gcd(a,b),则无解

定理:设a,b和m是整数,m>0,(a,m)=d,若d|b则ax≡b (mod m)恰有d个模m不同余的解,否则无整数解.(证明我也不会)
扩展欧几里得可以用于求解一元线性同余方程(形如 axb(mod m) )的解,可以建立以下方程 ax+my=b ,设 d=gcd(a,m) ,如果 db 则无整数解,否则,设 a0=a/d , m0=m/d ,求出 a0x+m0y=1 的解,然后乘上b/d,即为初始解x,共有d个模m剩余类满足方程
x,x+m0,x+2m0,...,x+(d1)m0

扩展欧几里得可以用于求 n % p 的乘法逆元,对于 x ,它的单位元是1,得到 (nn1)%p=1%p ,可以建立以下方程: nx+py=1 方程两边同时取余p,得到 nx%p=1%p ,所以用扩展欧几里得求得的x,即为 n1 ,由于 ax+by=1 ,当且仅当a和b互素的时候,方程才有解,所以,如果n和p不互素,则n关于% p 的乘法逆元不存在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值