当前位置:首页 » 操作系统 » 扩展欧几里德算法

扩展欧几里德算法

发布时间: 2025-03-02 12:51:33

‘壹’ 什么是欧几里得算法,它有什么意义

欧几里得算法即辗转相除法,用以求两个数的最大公约数(或者最小公倍数)
证明如下
假设x,y的最大公约数为d
且设x=k1*d,y=k2*d;
则有z=x-y=(k1-k2)*d;
也必定能被d整除,所以通过两个数不断辗转,直到其中一个变为0为止,以此最终快速得出两个数的最大公约数。
在算法的应用上是用求余以加速运算的速度。
总的来说,欧几里得算法的意义就是快速求得两个数的最大公约数。

‘贰’ 关于扩展欧几里得算法有点不明白,请大神指教

这是通过数学计算出来的(所以,学好数学很重要),其实你应该仔细理解该算法的原理!如下内容摘自:http://www.cnblogs.com/frog112111/archive/2012/08/19/2646012.html
扩展欧几里德算法
基本算法:对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ,使得 gcd(a,b)=ax+by。
证明:设 a>b。
1,显然当 b=0,gcd(a,b)=a。此时 x=1,y=0;
2,ab!=0 时
设 ax1+by1=gcd(a,b);
bx2+(a mod b)y2=gcd(b,a mod b);
根据朴素的欧几里德原理有 gcd(a,b)=gcd(b,a mod b);
则:ax1+by1=bx2+(a mod b)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的最大公约数。其计算原理依赖于下面的定理:
gcd函数就是用来求(a,b)的最大公约数的。
gcd函数的基本性质:
gcd(a,b)=gcd(b,a)=gcd(-a,b)=gcd(|a|,|b|) gcd(a,b)=gcd(b,a mod b)
证明:a可以表示成a = kb + r,则r = a mod b
假设d是a,b的一个公约数,则有
d|a, d|b,而r = a - kb,因此d|r
因此d是(b,a mod b)的公约数
假设d 是(b,a mod b)的公约数,则
d | b , d |r ,但是a = kb +r
因此d也是(a,b)的公约数
因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证 functiongcd(a,b:longint;varx,y:longint):longint;vart:longint;beginifb=0thenbeginx:=1;y:=0;exit(a);end;gcd:=gcd(b,amodb,x,y);t:=x;x:=y;y:=t-(adivb)*y;end;

热点内容
如何改网银密码 发布:2025-03-03 10:01:31 浏览:441
解压烟花 发布:2025-03-03 10:00:17 浏览:351
mac浏览器缓存清理 发布:2025-03-03 10:00:17 浏览:59
我的世界forlinux 发布:2025-03-03 10:00:05 浏览:208
用二叉链做存储结构 发布:2025-03-03 09:54:05 浏览:455
数据库qbe 发布:2025-03-03 09:53:56 浏览:756
iis编译器错误怎么办 发布:2025-03-03 09:50:37 浏览:60
云服务器cdn 发布:2025-03-03 09:43:21 浏览:505
趣编程下载 发布:2025-03-03 09:34:17 浏览:346
读写配置怎么设置 发布:2025-03-03 09:26:15 浏览:516