欧几里得扩展算法
来源:互联网 发布:网络安全教育考试 编辑:程序博客网 时间:2024/06/05 20:58
对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整
数对 x,y ,使得 gcd(a,b)=ax+by。
void extendGcd(__int64 a,__int64 b,__int64 &x,__int64 &y)
{
if(b==0)
{
x = 1;
y = 0;
return;
}
extendGcd(b,a%b,x,y);
__int64 temp;
temp = x;
x = y;
y = temp - a/b*y;
}
void main()
{
__int64 a,b,x,y;
while(scanf("%I64d %I64d",&a,&b)!=EOF)
{
extendGcd(a,b,x,y);
printf("%I64d %I64d\n",x,y);
}
}
{
if(b==0)
{
x = 1;
y = 0;
return;
}
extendGcd(b,a%b,x,y);
__int64 temp;
temp = x;
x = y;
y = temp - a/b*y;
}
void main()
{
__int64 a,b,x,y;
while(scanf("%I64d %I64d",&a,&b)!=EOF)
{
extendGcd(a,b,x,y);
printf("%I64d %I64d\n",x,y);
}
}
通解x = x0 + b,y = y0 -a;
设 ax1+by1=gcd(a,b);
bx2+(a mod b)y2=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.
- 欧几里得算法&&扩展欧几里得算法
- 欧几里得算法/扩展欧几里得算法
- 欧几里得算法&&扩展欧几里得算法
- 欧几里得、扩展的欧几里得算法
- 欧几里得及欧几里得扩展算法
- 欧几里得、扩展的欧几里得算法 .
- 欧几里得与扩展欧几里得算法
- 欧几里得和扩展欧几里得算法
- 欧几里得和扩展欧几里得算法
- 欧几里得算法及扩展欧几里得
- 欧几里得和扩展欧几里得算法
- 欧几里得, 扩展欧几里得算法模板
- 欧几里得算法及其扩展
- 扩展的欧几里得算法
- 扩展的欧几里得算法
- 欧几里得扩展算法
- 扩展欧几里得算法
- 扩展欧几里得算法
- (转)oracle for update和for update nowait的区别
- 微软面试题 编一个程序求质数的和
- 一个小问题
- Java栈与堆
- 数据结构学习1基本概念和术语
- 欧几里得扩展算法
- 了解External Accessory Framework之EAAccessory
- OpenGL笔记:三. 顶点数组和解引用
- 堆和栈的区别
- spring注解
- java中堆和栈的理解
- c/c++正则表达式
- OpenGL笔记:四. 视图变换
- 从错误中得知--关于字符串我以前没注意的东西