数论——扩展欧几里得

9 篇文章 1 订阅

作为一个刚学数论的蒟蒻,看扩欧还是费了半天时间的……
先发一下一道exgcd的题叭qwq 同余方程
一开始看是不会正解的,,,真的是一点也没法跟扩欧联系在一起qwq。然后又重新找各种博客、题解,终于能把这两个东西联系在一起,,,
先看一下扩欧的定义:

扩展欧几里德算法是用来在已知a, b求解一组x,y,使它们满足贝祖等式: ax+by = gcd(a, b) =d(解一定存在,根据数论中的相关定理)。扩展欧几里德常用在求解模线性方程及方程组中。

对于不定整数方程pa+qb=c,若 c mod gcd(p, q)=0,则该方程存在整数解,否则不存在整数解。

什么意思呢?举个例子。假设要求 ax ≡ 1 (mod b),a=3,b=10。
这里c=1,所以gcd(p,q)=1。则3*p+q*y=1。
顺便插一下百度百科给出的递推过程解释:
这里写图片描述

至于求a的逆元a^{-1}
由定义知道aa^{-1}\ mod\ M=1
那就是求方程ax+My=1的解啦,套扩展欧几里得就可以了。

其他用法反正就是用来解长成这样的方程…
具体代码如下

#include<cstdio>
#include<iostream>
using namespace std;
int a,b;
int x,y,r,t;
void exgcd(int a,int b)
{
    if(b==0)
    {
        x=1,y=0;
        return;
    }
    exgcd(b,a%b);
    t=x;
    x=y;
    y=t-a/b*y;
    return;
}
int main()
{
    cin>>a>>b;
    exgcd(a,b);
    cout<<(x+b)%b;
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值