1.概述

欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理:
gcd函数就是用来求(a,b)的最大公约数的。
gcd函数的基本性质:
gcd(a,b)=gcd(b,a)=gcd(-a,b)=gcd(|a|,|b|)
2.原理
设两数为a、b(a>b),用gcd(a,b)表示a,b的最大公约数,r=a (mod b) ,k=a/b(整除),即a÷b=k.......r。
1:令c=gcd(a,b),则设a=mc,b=nc // 因为c是最大公约数
2:根据a÷b=k.......r,可列k*b+r=a,代入a,b,解得r=c*(m-n*k)
3:由2可知c是r的一个因数。
4:可以断定m-kn与n互质(假设m-kn=xd,n=yd (d>1),则m=kn+xd=kyd+xd=(ky+x)d,则a=mc=(ky+x)cd,b=nc=ycd,则a与b的一个公约数cd>c,故c非a与b的最大公约数,与前面结论矛盾),因此c也是b与r的最大公约数。
从而可知gcd(b,r)=c,继而gcd(a,b)=gcd(b,r)。
证毕。
以上步骤的操作是建立在刚开始时r≠0的基础之上的。即m与n亦互质。
当r=0时,c=min(a,b).
代码如下:

int gcd(int a,int b){if(b==0) return a;else return gcd(b,a%b);}

3.拓展欧几里德算法(Extra Euclidean algorithm)
现在我们知道c=gcd(a,b),那么对于a*x+b*y=c的不定方程,我们一定能找到一组特殊解(x0,y0),使得a*x+b*y=c成立、
x = x0 + (b/gcd)*ty = y0 -  (a/gcd)*t

具体的原因可以去了解下贝祖等式

同时,我们也可以列出:

b*x1 + (a%b)*y1 = gcd

我们知道: a%b = a - (a/b)*b('/'整除)

那么,我们可以进一步得到:

gcd = b*x1 + (a-(a/b)*b)*y1

= b*x1 + a*y1 – (a/b)*b*y1

= a*y1 + b*(x1 – a/b*y1)

 x = y1y = x1 – a/b*y1

有了递推式,就可以形成递归

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

更多拓展的内容可以参考:http://blog.csdn.net/yo_joker/article/details/52578174

欧几里德算法(Euclidean algorithm)相关推荐

  1. 【数论基础】欧几里德算法及其各种应用

    目录: 欧几里德算法(辗转相除法) 1.问题引入:线段上格点的个数 2.输入两个正整数,求最大公约数和最小公倍数 3.P1029 最大公约数和最小公倍数问题 欧几里德算法(辗转相除法) 辗转相除法, ...

  2. 如何利用扩展欧几里得算法求解不定方程_欧几里德算法、拓展欧几里德、中国剩余定理...

    01.欧几里德算法(Euclidean algorithm)(辗转相除法) 欧几里德算法又称辗转相除法,主要是用于计算两个整数a,b的最大公约数. 简单点说一下算法原理:两个整数的最大公约数等于其中小 ...

  3. 欧几里德算法、拓展欧几里德、中国剩余定理

    目录 欧几里德算法(Euclidean algorithm)(辗转相除法) 拓展欧几里德算法 中国剩余定理 作业1: 作业2: 欧几里德算法(Euclidean algorithm)(辗转相除法) 欧 ...

  4. 浅析欧几里德算法 GCD和LCM

    前言 欧几里德算法作为有着非常简短的实现的算法,可能很多初学者(包括当时的我)都不求甚解.本文给出了GCD.LCM的性质,以及欧几里德算法的实现.证明和时间复杂度推导. 这里是我的个人网站: http ...

  5. (扩展欧几里德算法)zzuoj 10402: C.机器人

    10402: C.机器人 Description Dr. Kong 设计的机器人卡尔非常活泼,既能原地蹦,又能跳远.由于受软硬件设计所限,机器人卡尔只能定点跳远.若机器人站在(X,Y)位置,它可以原地 ...

  6. 集训笔记---扩展欧几里德算法(POJ NO.1061 青蛙的约会 有点烦人小跳蛙gcd)

    又在搬砖,本来以为这是一个追及问题,后来发现数据好像并不是那么个意思,后来把方程列出来,经过一个去模的操作,我们其实可以找到一点线索,那就是,一个经过变形的二元一次方程,那么在这种情况下,就可以利用扩 ...

  7. 扩展欧几里德算法详解

    转自:http://blog.csdn.net/zhjchengfeng5/article/details/7786595 扩展欧几里德算法 谁是欧几里德?自己百度去 先介绍什么叫做欧几里德算法 有两 ...

  8. 【算法】欧几里德算法——求两个整数的最大公约数

    目录 1. 算法简介 2. 算法实现 2.1 暴力穷举法 2.2 欧几里德算法 1. 算法简介 欧几里德(Euclidean)算法,又被称辗转相除法,是求最大公约数的算法. 两个数的最大公约数是指能同 ...

  9. 关于欧几里得算法(Euclidean Algorithm)的迭代次数的证明

    欧几里得算法(Euclidean Algorithm)的迭代次数和算法复杂度的证明 我们直到欧几里得算法是计算两个数的最大公因数(或者两个多项式的最大公因式),并且在其他算法中(例如因子分解算法)经常 ...

  10. HMM——维特比算法(Viterbi algorithm)

    1. 前言 维特比算法针对HMM第三个问题,即解码或者预测问题,寻找最可能的隐藏状态序列: 对于一个特殊的隐马尔可夫模型(HMM)及一个相应的观察序列,找到生成此序列最可能的隐藏状态序列. 也就是说给 ...

最新文章

  1. 你写的接口都测试吗?测什么?怎么测?
  2. Linux内核源代码获取方法
  3. 台积电砸7500亿强攻5nm
  4. iOS-Xcode代码统计
  5. AS3工程中的Loading的应用
  6. 02-24 面向对象--方法重载、隐藏
  7. static的用法及其与auto的区别小结
  8. Android 客户端与服务器交互方式
  9. 为什么老板给 ta 升职加薪?
  10. Java中Http连接的两种方式
  11. 把服务器sql数据库导出excel文件,从sql中导出到excel表格数据-如何把SQLServer表数据导出为Excel文件...
  12. RFC 5961翻译
  13. 原生Ajax实现formdata
  14. ASP.NET实现验证码图片
  15. 百度语音合成离线使用研究
  16. 深度思考-不断逼近问题的本质
  17. CST STUDIO SUITE 2019 Linux download
  18. [历朝通俗演义-蔡东藩-前汉]第011回 降真龙光韬泗水 斩大蛇夜走丰乡
  19. AM335x 如何修改phy及双网络使用说明(精华!!!)
  20. 数控技术转行java_我29岁想转行数控却找不到工作

热门文章

  1. mysql+xf01x,[613]redis数据迁移
  2. The IMAP server replied to the 'EXAMINE' command with a 'NO' response: EXAMINE Unsafe Login.
  3. 4月6日----4月10日二年级课程表
  4. 称重管理系统服务器不通,称重管理系统使用方法(二)
  5. QT实现串口调试助手(三):保存日志、QSS样式载入
  6. Java利用数组求某年某日某月是某年的第几天(数组)
  7. 循环队列front==rear
  8. android 环信集成,Android 环信集成使用总结
  9. 20211218:口罩数据汇总
  10. 计算机系统适应社会不断发展,教师招聘《中学教育心理学》通关试题每日练(2020年11月27日-944)...