ACM数论基础之扩展欧几里德详细证明

ACM数论基础之扩展欧几里德详细证明

ID:43323679

大小:119.50 KB

页数:10页

时间:2019-09-29

ACM数论基础之扩展欧几里德详细证明_第1页
ACM数论基础之扩展欧几里德详细证明_第2页
ACM数论基础之扩展欧几里德详细证明_第3页
ACM数论基础之扩展欧几里德详细证明_第4页
ACM数论基础之扩展欧几里德详细证明_第5页
资源描述:

《ACM数论基础之扩展欧几里德详细证明》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、ACM数论基础之扩展欧几里德算法欧儿里徳算法概述:欧儿里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理:gcd函数就是用来求(a,b)的最大公约数的。gcd函数的基本性质:gcd(a,b)=gcd(b,a)=gcd(-a,b)=gcd(

2、a

3、,

4、b

5、)欧儿里得算法的公式表述gcd(a,b)=gcd(b,amodb)证明:a可以表示成a=kb+r,贝'Jr=amodb假设d是a,b的一个公约数,则有d

6、a,d

7、b,而r=a-kb,因此d

8、r因此d是(b,amodb)的公约数假设d是(b,amodb)的公约数,贝ijd

9、b,d

10、r,但是a=kb+r因此

11、d也是(a,b)的公约数因此(a,b)和(b,amodb)的公约数是一样的,其最大公约数也必然相等,得证欧几里德算法的C++语言描述intGcd(inta,intb){if(b==0)returna;returnGcd(b,a%b);}当然你也可以写成迭代形式:intGcd(inta,intb){while(b!=0){intr=b;b=a%b;a=r;}returna;}扩展欧几里德定理对于不完全为0的非负整数a,b,gcd(a,b)表示a,b的最大公约数,必然存在整数对x,y,使得gcd(a,b)=ax+by。C++语B实现includeusingnamespa

12、cestd;intx,y,q;voidextend_Eulid(inta,intb){if(b==0){x=1;y=0;q=a;}else{extend_Eulid(b,a%b);inttemp=x;x=y;y=temp・a/b*y;}}intmain(){inta,b;cin>>a»b;if(abo1,显然当b=0,gcd(a,b)=a0此时x=1,y=0;2,ab<>0时设ax1+by1=g

13、cd(a,b);bx2+(amodb)y2=gcd(b,amodb);根据朴素的欧儿里德原理有gcd(a5b)=gcd(b,amodb);则:ax1+by1=bx2+(amodb)y2;即:ax1+by1=bx2+(a-(a/b)*b)y2=ay2+bx2-(a/b)*by2;根据恒等定理得:x1=y2;y1=x2-(a/b)*y2;这样我们就得到了求解x1,y1的方法:x1,y1的值基于x2,y2.上面的思想是以递归定义的,因为gcd不断的递归求解一定会有个时候b=0,所以递归可以结束。扩展欧几里德算法扩展欧几里德算法是用来在己知a,b求解一组x,y使得ax+by=Gcd(a,b)=

14、d(解一定存在,根据数论中的相关定理)。扩展欧几里德常用在求解模线性方程及方程组中。下面是一个使用C++的实现:intexGcd(inta,intb,int&x,int&y){if(b==0){x=1;y=o;returna;-很难找出一个这么实现的价值,因为扩展欧几里得还有更大的用途;个人认为定义全局数组更好,不用returnr。}intr=exGcd(b,a%b,x,y);intt=x;x=y;y=t-a/b*y;returnr;}把这个实现和Gcd的递归实现相比,发现多了下面的x,y赋值过程,这就是扩展欧几里德算法的精髓。可以这样思考:对于a'=b,b'=a%b而言,我们求得x,

15、y使得a'x+b*y=Gcd(a',b')由于b、a%b=a・a/b5(注:这里的/是程序设计语言中的除法)那么可以得到:a*x+b'y=Gcd(ab1)===>bx+(a・a/b*b)y=Gcd(a',b*)=Gcd(a,b)===>ay+b(x-a/b*y)=Gcd(a,b)因此对于a和b而言,他们的相对应的p,q分别是y和(x-a/b*y)使用扩展欧几里德算法解决不定方程的办法对于不定整数方程pa+qb=c,若cmodGcd(a,b)=0,则该方程存在整数解,否则不存在整数解。上面已经列出找一个整数解的方法,在找到p*a+q*b=Gcd(a,b)的一组解pO,qO后,/*p*a

16、+q*b=Gcd(a,b)的其他整数解满足:p=pO+b/Gcd(a,b)*tq=qO-a/Gcd(a,b)*t(其中t为任意整数)至于pa+qb=c的整数解,只需将p*a+q*b=Gcd(a,b)的每个解乘上c/Gcd(a,b)即可在找到p*a+q*b=Gcd(a,b)的一组解pO,qO后,应该是得到p*a+q*b=c的一组解p1=pO*(c/Gcd(a,b)),q1=qO*(c/Gcd(a,b)),p*a+q*b=c的其他整数解满足:p=p

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。