扩展欧几里得算法
来源:互联网 发布:想开淘宝店,卖什么好 编辑:程序博客网 时间:2024/05/17 07:19
二.扩展欧几里得算法:
1.扩展的欧几里得算法描述:
输入:两个非负整数a,b,且a>=b;
输出:d=gcd(a,b)与满足ax+by=d的整数x与y.
1).若b==0,则d=a,x=1,y=0,返回(d,x,y);
2).设x2=1,x1=0,y2=0,y1=1;
3).当b>0时,做如下操作:
3.1)mod=a%b;
3.2)r=a-mod*b,a=b,b=r;
3.3)x=x2-mod*x1,x2=x1,x1=x;
3.4)y=y2-mod*y1,y2=y1,y1=y;
4).令d=a,x=x2,y=y2,并返回(d,x,y)。
2.代码如下:
#include<stdio.h>
void input(int &a,int &b)
{
int data1,data2;
scanf("%d,%d",&a,&b);
}void Extend_Euclid_gcd (int max,int min,int &d,int &x,int &y)
{
int r,temp;
int x1,x2;
int y1,y2;
int mod;
if(max<min)
{
temp=max;
max=min;
min=temp;
}
if(min==0)
{
d=max;
x=1;
y=0;
return;
}
x2=1,x1=0;
y2=0,y1=1;
while(min>0)
{
mod=max/min;r=max-mod*min;max=min;min=r;
x=x2-mod*x1;x2=x1;x1=x;
y=y2-mod*y1;y2=y1;y1=y;
}
d=max,x=x2;y=y2;
}
void main()//输出的结果目标:d=gcd(a,b)与满足ax+by=d的整数x与y
{
int a,b,d,x,y;
printf("请输入两个非负整数数:");
input(a,b);
Extend_Euclid_gcd (a,b,d,x,y);
printf("输出结果:%d=gcd(%d,%d),%d*(%d)+%d*(%d)=%d/n",d,a,b,a,x,b,y,d);
}
/*测试结果:
请输入两个非负整数数:4864,3458
输出结果:38=gcd(4864,3458),4864*(32)+3458*(-45)=38
*/
- 欧几里得算法&&扩展欧几里得算法
- 欧几里得算法/扩展欧几里得算法
- 欧几里得算法&&扩展欧几里得算法
- 欧几里得、扩展的欧几里得算法
- 欧几里得及欧几里得扩展算法
- 欧几里得、扩展的欧几里得算法 .
- 欧几里得与扩展欧几里得算法
- 欧几里得和扩展欧几里得算法
- 欧几里得和扩展欧几里得算法
- 欧几里得算法及扩展欧几里得
- 欧几里得和扩展欧几里得算法
- 欧几里得, 扩展欧几里得算法模板
- 欧几里得算法及其扩展
- 扩展的欧几里得算法
- 扩展的欧几里得算法
- 欧几里得扩展算法
- 扩展欧几里得算法
- 扩展欧几里得算法
- 【转】用JAVA生成GIF动画
- Hibernate学习笔记
- Cmd模式下的入侵技术大全
- 图解TOMCAT 体系结构
- pygtk给TextView设置值的g_utf8_validate问题
- 扩展欧几里得算法
- 能手之梦
- windows下用虚拟机VMwareRedHatlinux9.0通过nat上网
- 两线制PT100温度计算代码
- JAVA内存分析笔记
- 免费是怎么赚钱的?
- Translation Lookaside Buffer (TLB)
- 使用python获取本地时区的几种方法
- 团购危机