posts - 99,  comments - 8,  trackbacks - 0

讲解拓展的欧几里德算法:
一、内容: 
对于不完全为 0 的非负整数 abgcdab)表示 ab 的最大公约数,必然存在整数对 xy ,使得 gcdab=ax+by。如果gcd(a, b)d,那么一定存在xy满足axby=d;

二、推导: 如何求  x   y 
a>b 
1,显然当 b=0gcdab=a。此时 x=1y=0
2ab<>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 的方法:x1y1 的值基于 x2y2.
三、算法如下:
 
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 temp = x;      //   x 即 返回的x2
x = y;                   // x  即要求的 x1
y = temp - a / b * y;   
}                               理解递归 例:a = 48,b = 22 得到   x = 11, y = -24
posted on 2010-08-28 22:05 雪黛依梦 阅读(294) 评论(0)  编辑 收藏 引用 所属分类: 数论

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(4)

随笔分类

随笔档案

文章档案

搜索

  •  

最新评论

阅读排行榜

评论排行榜