欧几里得& 拓展欧几里得(Euclid & Extend-Euclid)

欧几里得算法(Euclid)

背景:

欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数。                                                                                                                                               ——百度百科

代码:

递推的代码是相当的简洁:

int gcd(int a,int b) { return b == 0 ? a : gcd(b, a % b); }

分析:

方法说了是辗转相除法,自然没有什么好介绍的了。。

Fresh肯定会觉得这样递归下去会不会爆栈?实际上在这里是不会爆栈的,因为递归的层数是非常小的,不信你可以随便拿一些大数测试一下,lrj的白书和紫书上讲到gcd函数的递归层数不超过40785lgN + 1.6723,其中N=max{a,b}。让gcd函数递归层数最多的是gcd(F(n),F(n-1)),F(n)是Fibonacci数!!至于为什么博主没有证明,有想法的小伙伴麻烦在评论在说下下,(*^__^*) 嘻嘻……

拓展欧几里得(Extend- Euclid)

背景:

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

用到的几个欧几里得重要结论:

1)            gcd(a,b) =  gcd(b,a %b);

2)            gcd(a,0) =  a.

代码:

typedef __int64 ll;
void exgcd(ll a, ll b, ll& d, ll& x, ll &y)
{if(!b){d = a, x = 1, y = 0;}else{exgcd(b, a % b, d, y, x);y -= x * (a / b);}
}

分析:

设如下两个方程:

ax+by  =  gcd(a,b)  =  d;

bx’+(a%b)y’  =  gcd(b,a%b);

那么由重要结论(1)有gcd(a,b)  =  gcd(b,a %b),

那么ax+by  =  bx’+(a%b)y’  =  bx’ +(a – [a/b]*b)y’  =  ay’ + b(x’ – [a/b]y’),

由恒等关系有: x = y’ , y = (x’ – [a/b]y’),[a/b]表示a/b的值向下取整。

........

那么现在就可以用exgcd(a,b,d,x,y)表示方程ax+by = d,那么由上面一直递归下去,直到 b = 0,递归结束,此时  d = gcd(a,0) =a , x = 1,y =0;【因为 ax+0*y = gcd(a,0)嘛~】

拓展欧几里得的几个应用

求解不定方程

例如:求解不定整数方程ax+by = c

求ax+by = c, 令d =gcd(a,b);

那么(a / d ) * x + (b / d )* y = c / d

因为(a / d )、(b / d ) 、x、y都是整数,那么保证原不定整数方程ax+by = c有解的充要条件就是c / d为整数,即c是gcd(a,b)的倍数。

如果有解,那么令 K = c/d;

那么,对方程aX+bY = d;假设有拓展欧几里得求出一组解为(X0,Y0),那么aX0+bY0 = d;等式两边同时乘以K,即K*( aX0+bY0 ) = d*K = c;由恒等关系,原方程的解(x0,y0):

X0 = KX0 = c/d * X0,y0 = KY0 = c/d *Y0。

不定方程的通解:

若(x0,y0)是不定整数方程ax+by = c的一组解,则他的任意整数解都可以表示成(x0+ kb’, y0-ka’),其中a’ = a/gcd(a,b), b’ = b/gcd(a,b).

例题:

POJ  1061青蛙的约会  链接:    http://poj.org/problem?id=1061

求解模线性方程

方法跟上面类似,将同余方程转化为常规线性方程就可以了,跟上面一样,谈到同余方程的一个解时,其实指的是一个同余等价类....

具体内容待补充...

求模的逆元

待补充…

欧几里得  拓展欧几里得算法 讲解 (Euclid Extend- Euclid Algorithm)相关推荐

  1. 欧几里得扩展欧几里得算法及相关的数学证明

    //欧几里得算法求最大公约数 int gcd(int m,int n) {int u0=m,u1=n,t;if( u0<u1 )// 保证u0>=u1u0^=u1,u1^=u0,u0^=u ...

  2. 欧几里得扩展欧几里得算法

    #朴素的欧几里得算法大家应该知道 g c d ( a , b ) gcd(a,b) gcd(a,b)表示a,b的最大公约数 朴素的欧几里得算法其实就是所谓的辗转相除法 辗转相除法 g c d ( a ...

  3. 【原创】更相减损术 stein算法 欧几里得算法 拓展欧几里得算法 扩展欧几里得算法 逆元的计算与筛法 解模线性方程

    欧几里得 说在前面 数论学复习 Part 6. 然后再来一章CRT和组合数,就飞往概率,以此为跳板去向DP. 计划很美啊你. P.S. 这么说来拉格朗日插值可以说是数论学复习的Part 0了啊. 有一 ...

  4. 拓展 欧几里得算法 求逆元_ECC椭圆曲线加密算法:有限域和离散对数

    Hi all,我来翻译第二篇啦.若大家发现那些翻译的不够准确还望指出,不胜感激.首先放上原文链接: http://andrea.corbellini.name/2015/05/23/elliptic- ...

  5. 欧几里得算法和拓展欧几里得算法

    一.欧几里得算法(辗转相除法): 结论:gcd(a,b)=gcd(b,a%b). 证明:假设a,b的最大公约数为r,a=k1r,b=k2r(k1>k2). 则a%b=k1r-nk2r=(k1-n ...

  6. 从欧几里得到拓展欧几里得

    欧几里得定理: 公式表述 gcd(a,b)=gcd(b,a mod b) 证明:a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个 公约数,则有 d|a, d|b,而r ...

  7. 拓展欧几里得算法java实现

    扩展欧几里得算法是欧几里得算法(又叫辗转相除法)的扩展.除了计算a.b两个整数的最大公约数,此算法还能找到整数x.y(其中一个很可能是负数). 通常谈到最大公因子时, 我们都会提到一个非常基本的事实: ...

  8. 数论读书笔记——欧几里得和扩展欧几里得

    欧几里得: 欧几里得算法: 定理1:整数a≥b>0,令r0=a,r1=b如果我们做带余除法得到rj=r(j+1)q(j+1)+r(j+2),且0<r(j+2)<r(j+1),j=0, ...

  9. 欧几里得,扩展欧几里得,孙子定理

    欧几里得 这人是真的厉害! 辗转相除法 #include <iostream> #include <cstring> #include <algorithm>usi ...

最新文章

  1. numpy.transpose()用法
  2. SAP QM初阶事务代码QA11对检验批做UD时出现很多UD Code的选择集?
  3. pandas替换列值
  4. 美国出手管制五家中国超算企业
  5. 50个python库
  6. android gridview 数据绑定,Android GridView数据绑定
  7. 因讨要介绍费引发纠纷 浙江龙湾一男子砍死房产中介
  8. Vue- Markdown 使用大全
  9. java求两数最小公倍数_java求解2个数的最小公倍数
  10. 火焰纹章16进制是怎么算_火焰是值得你的时间
  11. 联想G460笔记本触摸板驱动 For Windows 7 x64
  12. 阿里云安装nacos
  13. html画布里增添颜色,在HTML5画布中更改笔触颜色
  14. 读者网作者发布次数统计爬虫(三种实现方法)
  15. request进行搜索引擎关键词提交
  16. P2600 [ZJOI2008]瞭望塔
  17. BR系列罗氏电流线圈变送器——安科瑞崔远航
  18. 【求职】瓜子二手车 C++方向面经
  19. .net中创建简单反射实例
  20. 田野调查手记·浮山篇(八)

热门文章

  1. 论文阅读:Gradient Harmonized Single-stage Detector
  2. C语言项目 电话查询系统 哈希表实现(项目要求 + 运行界面 + 代码分析 + 完整代码)
  3. 实际案例说明计算机网络安全,计算机网络安全案例教程
  4. 使用ssh对服务器进行登录
  5. 常用的git命令(实用)
  6. Java的封装继承多态简介与实例
  7. Pointofix ,截屏神器,好用到飞的软件
  8. diskgenius系统迁移_关于系统迁移至SSD
  9. Docker数据卷挂载相关
  10. DHCP服务配置-Cisco模拟器