扩展欧几里德算法(附证明)

原创 2015年10月24日 23:45:49

扩展欧几里德算法(附证明)

tags : acm 数论


完全没接触过数论的渣渣脑抽不想敲代码,便看看数论冷静一下.

扩展欧几里得算法在acm-icpc中是常用算法,主要用于在已知a,b的情况下求解一组x,y,使它们满足贝祖等式: ax+by=gcd(a,b)=d.
顾名思义,该算法是对欧几里得算法的拓展.其代码也是在gcd的基础上做小小的修改.

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;
}

证明:

(证明过程参考自百度百科)

原式: ax+by=gcd(a,b)(假设ab)

  • 当b=0时有gcd(a,b)=a,此时x=1,y=0

  • 当b不为0时,根据欧几里得定理gcd(a,b)=gcd(b,amodb)可得ax+by=gcd(a,b)=gcd(b,amodb)=bx+(amodb)y,即

    ax+by=bx+(amodb)y=bx+(aba/b)y

    移项得
    ax+by=bx+(amodb)y=ay+b(xa/by)

    根据恒等定理,有
    {x=yy=xa/by

    这有什么用呢?xy还是不知道呀.
    重新来看看我们得到的两个等式.x和y是gcd(a,b)=ax+by的解,而x’和y’是在对gcd(a,b)按欧几里德算法进行一步后的结果对应的贝祖等式gcd(b,amodb)=bx+(amodb)y的解.也就是说,gcd(a,b)对应的贝祖等式的解x,y可以由gcd(b,amodb)对应等式的解x’,y’计算得出
    由于欧几里德算法最后一步为gcd(d,0)=d,此时对应的等式的解为x=1,y=0,因此只要如上述代码,从gcd(d,0)往前处理,在进行欧几里德算法的递归的时候根据相邻两次调用间x,y和x’,y’的关系计算即可求出ax+by=gcd(a,b)的解.

更进一步,对于任意不定式ax+by=c,只需要在等式ax+by=gcd(a,b)=d两边乘上c/d即可得到解为x=xc/d,y=yc/d

如何得到所有解?
实际上在之前的计算和证明中我们得到的只是不定方程的一组解,那么怎样得到所有解呢?对于一般形式ax+by=c有通解x=p+kb,y=qka(k).(证明略,只要代入一下就知道为什么通解是这个了)

版权声明:本文为博主原创文章,未经博主允许不得转载,未经允许将会考虑法律手段维权。 https://blog.csdn.net/lincifer/article/details/49391175

扩展欧几里得专题

最近一周都在刷扩展欧几里得、逆元、整除之类的数论专题,颇有心得,决定写一发。虽然说是扩展欧几里得专题,但是其实里面加了几道普通数论题,不想做的可以跳过。因为我是随便找的题目,所以题目的难度不是按照我的...
  • shengtao96
  • shengtao96
  • 2016-04-24 19:36:51
  • 2909

扩展欧几里德算法详解

扩展欧几里德算法     谁是欧几里德?自己百度去     先介绍什么叫做欧几里德算法     有两个数 a b,现在,我们要求 a b 的最大公约数,怎么求?枚举他们的因子?不现实,当 a b...
  • zhjchengfeng5
  • zhjchengfeng5
  • 2012-07-25 21:49:04
  • 61053

扩展欧几里德(顺带说一下取模)

扩展欧几里德定律:  对于不完全为0的非负整数a,b,gcd(a, b)表示a, b的最大公约数,必定存在整数对x,y,满足a*x+b*y==gcd(a, b)。 证明:(转) a*x1+b*y1...
  • tree__water
  • tree__water
  • 2016-08-03 23:47:20
  • 2856

扩展欧几里得算法模板(希望永远不要搞懂了)

扩展欧几里得 上述谈到的最大公约数算法是数学家欧几里德提出的,同时,他也提出了扩展欧几里德算法来解决整数二元一次不定方程问题。 整数二元一次不定方程 形如a*x+b*y=c(...
  • fanesemyk
  • fanesemyk
  • 2016-08-05 18:40:02
  • 1697

扩展欧几里得

扩展欧几里德算法     谁是欧几里德?自己百度去     先介绍什么叫做欧几里德算法     有两个数 a b,现在,我们要求 a b 的最大公约数,怎么求?枚举他们的因子?不现实,当 a b...
  • Summer__show_
  • Summer__show_
  • 2017-05-16 21:30:33
  • 131

逆元的几种求法(扩展欧几里得,费马小定理或欧拉定理,特例,打表等)

乘法逆元 对于缩系中的元素,每个数a均有唯一的与之对应的乘法逆元x,使得ax≡1(mod n) 一个数有逆元的充分必要条件是gcd(a,n)=1,此时逆元唯一存在 逆元的含义:模n意义下,1个数a...
  • guhaiteng
  • guhaiteng
  • 2016-08-04 22:24:15
  • 11374

辗转相除求最大公约数

序 求最大公约数的最常用的算法是欧几里得算法,也称为辗转相除法。问题定义为求i和j的最大公约数gcd(i,j),其中i和j是整数,不妨设i>j。 算法可以递归的表示: 1. 如果j能整除i,那么gcd...
  • fly_yr
  • fly_yr
  • 2016-02-29 11:29:35
  • 1859

扩展欧几里得入门必看

首先、扩展欧几里得定理:对于两个不全为0的整数a、b,必存在一组解x,y,使得ax+by==gcd(a,b); 实现如下: int gcd(int a,int b) { int t,d; ...
  • YHYYXT
  • YHYYXT
  • 2015-04-21 23:12:49
  • 1197

扩展欧几里得 详解入门

扩展欧几里得:  a和b的最大公约数可以根据欧几里得算法求解,得到了GCD。那么,必定存在x和y,使得ax+by=GCD。一个方程两个未知数,这是一个不定方程,存在多组解。欧几里得算法,即辗转相...
  • shiyongyang
  • shiyongyang
  • 2017-09-27 08:34:12
  • 129

扩展欧几里德算法详解以及乘法逆元

转载网址:http://blog.csdn.net/zhjchengfeng5/article/details/7786595 有些地方看不懂,但觉得写的很棒,先转载下来,以后慢慢研究…… ...
  • Stray_Lambs
  • Stray_Lambs
  • 2016-08-05 22:26:22
  • 7441
收藏助手
不良信息举报
您举报文章:扩展欧几里德算法(附证明)
举报原因:
原因补充:

(最多只允许输入30个字)