C语言实现欧几里得算法与扩展欧几里得算法

1、欧几里得算法

1.1 原理阐述

欧几里得算法求最大公约数原理主要依赖于以下定理:gcd(a,b)=gcd(b,a%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)的公约数因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证

1.3 C语言编程实现

以下是C语言程序代码:

#include

long Eucli(long a,long b,long &n)

{

if(b==0) return a;

{n=n+1;return Eucli(b,a%b,n);}

}

int main()

{

long a,b,n=0,d,t=0;

printf("enter the first number:\n");

scanf("%ld",&a);

printf("enter the second number:\n");

scanf("%ld",&b);

if(a

d=Eucli(a,b,n);

printf("gcd=%ld\n",d);

printf("迭代次数:%ld\n",n);

return 0;

}

下图是用VC6运行代码时的截图。

扩展欧几里得算法

2.1 原理阐述

扩展欧几里德算法是用来在已知a, b求解一组x和y,使它们满足等式: ax+by =?gcd(a, b) =d(解一定存在,根据数论中的相关定理)。即对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x和y,使得 gcd(a,b)=ax+by。

2.2 算法设计

扩展欧几里得算法,精髓在于对x和y的赋值。对于a' = b,b' = a % b 而言,我们求得 x,y使得 a'x + b'y = Gcd(a',b')由于b' = a% b = a - a / b * b 那么可以得到:a'x + b'y= Gcd(a',b') ,因而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)。具体流程图如下:

2.3 C语言编程实现

以下是C语言程序代码:

#include

long exEucli(long a,long b,long & x,long & y,long & n){

if(b == 0){ x = 1; y = 0; return a;}

n+=1;

long r = exEucli(b, a%b, x, y,n);

long t = y;y = x - (a/b)*y;x = t;

return r;

}

int main()

{

long a,b,x,y,n=0,t;

printf("enter the first number:\n");

scanf("%ld",&a);

printf("enter the second number:\n");

scanf("%ld",&b);

if(a

exEucli(a,b,x,y,n);

printf("gcd=%ld\n",a*x+b*y);

printf("迭代次数:%ld\n",n);

return 0;

}

下图是在VC6中运行代码时的截图。

两种算法运行效率比较

通过对两种算法的原理进行研究,再结合以上两张截图,我们发现,76512348两数进行最大公约数的求解中,两种递归算法的迭代次数都是12次。但是,有所不同的是,在欧几里得算法中,每次迭代进行的操作是对a和b求余数。而在扩展欧几里得算法中,每次迭代时,除了要做一次求商的之外,还要做一次乘法和减法。因此,运用欧几里得算法和扩展欧几里得算法对两个整数求最大公约数时,欧几里得算法更为高效。

1

1

开始

对a和b进行赋值

b=t

a=b

t=mod(a,b)

结束

输出最大公约数b

a%b=0

N

Y

开始

x=t

y=x-(a/b)*y

t=y

结束

输出最大公约数a*x+b*y

b=0

输入a和b

c语言扩展欧几里得算法编程实现,C语言实现欧几里得算法与扩展欧几里得算法.doc...相关推荐

  1. c语言与汇编语言混合编程实验,C语言与汇编语言混合编程实验

    混合编程方法: 模块链接法 汇编指令嵌入法 1: 模块链接法则 模块链接法是指分别用汇编语言和C语言实现独立的模块(或子程序),再用链接程序把各模块生成的obj文件连接成一个可执行程序. 1:C语言调 ...

  2. java与c语言哪个好学_Java编程和C语言哪个好学

    原标题:Java编程和C语言哪个好学 学哪种编程语言好?计算机编程语言非常多,诸如Java.C.C++.PHP等,很多人在选择的时候都会觉得头大.到底学哪种编程语言好? 很多人都拿Java和c相比较, ...

  3. c语言常考的编程题,C语言操作题常考编程题库

    <C语言操作题常考编程题库>由会员分享,可在线阅读,更多相关<C语言操作题常考编程题库(32页珍藏版)>请在人人文库网上搜索. 1.C语言编程题覆盖到的算法:1.个人所得税计算 ...

  4. c语言数组的一维编程,【C语言】转换一维数组

    #include #define MAX_SIZE 20 /* 最大数组个数 */ void TransposeArray(int *arr,int size); int main() { int s ...

  5. c语言t0中断方式编程,PIC C语言编程_PICC中断函数的实现

    PICC可以实现C语言的中断服务程序.中断服务程序有一个特殊的定义方法: voidinterruptISR(void); 其中的函数名"ISR"可以改成任意合法的字母或数字组合,但 ...

  6. 2019年青少年编程c语言考试,全国青少年软件编程(C语言)等级考试试题 2019年9月(一级含答案)...

    ​全国青少年软件编程(C语言)等级考试试题 2019年9月(一级含答案) 一.编程题(第1部分) (共4题,每题12分,共48分) 1.输出第二个整数 输入三个整数,把第二个输入的整数输出. 时间限制 ...

  7. java和c语言哪个简单_Java编程和C语言哪个好学

    学哪种编程语言好?计算机编程语言非常多,诸如Java.C.C++.PHP等,很多人在选择的时候都会觉得头大.到底学哪种编程语言好? 很多人都拿Java和c相比较,那么今天小编就来先说说我的个人理解吧, ...

  8. c语言贪吃蛇游戏编程视频教程,C语言贪吃蛇游戏精典源码 - 视频教程 - VC中文网-VC-MFC编程论坛 - Powered by Discuz!...

    19f700059b660539d5dc (38.08 KB, 下载次数: 0) 2017-11-14 16:28 上传 C语言贪吃蛇游戏精典源码 19f500058fe8fcaf675a (2.98 ...

  9. c语言数组和字符串编程题,C语言中的字符数组和字符串详解

    c语言字符数组和字符串: 1.存放字符的数组称为字符数组 char str[] 2.'\0'也被称为字符串结束标志 3.由" "包围的字符串会自动在末尾添加'\0' 4.逐个字符地 ...

  10. c语言马踏棋盘编程分析,C语言马踏棋盘实现

    原标题:C语言马踏棋盘实现 问题描述 国际象棋的棋盘为8×8的方格棋盘.现将"马"放在任意指定的方格中,按照"马"走棋的规则将"马"进行移动 ...

最新文章

  1. Log4j日志管理的用法
  2. YOLOv5在建筑工地中安全帽佩戴检测的应用
  3. oracle12 java_java – 无法使用12c jar创建Eclipse数据源到Oracle 12c.不过11g的作品
  4. PostgreSQL在何处处理 sql查询之三十八
  5. table中head表头固定,body滚动
  6. LeetCode 77.组合求和
  7. 上万条数据撕开微博热搜的真相!
  8. android e图标一会有一会没有反应,android解决菜单Menu添加Icon无效问题,让菜单同时显示图标和文字...
  9. 【HTTPS运维神器】终于等到你!MySSL企业版重磅上线!
  10. (紫书,感谢作者)第7章暴力求解法
  11. 华为此时就把 5G 芯片用在手机上,垒起了多高的竞争壁垒?
  12. nodejs入门开发与常用模块
  13. Stata数据处理:快速读取万德-Wind-数据-readWind2
  14. wc与xargs命令
  15. 开源交通仿真平台SimMobility的安装教程
  16. 谷歌gmail注册入口_如何将Gmail,联系人和Google日历添加到iPhone或iPad
  17. 火车头采集器计划任务设置时间间隔无效问题解决
  18. 一起来认识数组公式(最基础)
  19. 树模型(四):随机森林
  20. 【Oracle】存储过程基本语法

热门文章

  1. 如何鉴别硬盘是否是全新的,及HD Tune的使用方法
  2. html吃豆豆游戏代码,吃豆豆小游戏
  3. oracle varchar2 转换成date,将Oracle VARCHAR2转换为DATE并排除无效数据
  4. windows注册表文件关联机制
  5. JavaScript短信验证码60秒倒计时插件
  6. 地图比例尺与空间分辨率之间的关系_卫星遥感制图最佳影像空间分辨率与地图比例尺关系探讨.doc...
  7. 5V升压充电12.6V锂电池方案
  8. h3c无线控制器ac配置
  9. java nlpir_NLPIR爱好者
  10. 程序员的思维修炼:开发认知潜能的九堂课