使用Euclid算法求最大公约数

╰+哭是因爲堅強的太久メ 2021-11-09 23:58 410阅读 0赞

参考文章 

  1、《linux c编程一站式学习》的习题5.3.1

  2、百度百科Euclid算法:https://baike.baidu.com/item/Euclid%E7%AE%97%E6%B3%95

思想

  使用Eucid算法编写两个正整数a和b的最大公约数(GCD, Greatest Common Dvisor)

  1、如果a能整除b, 则最大公约数是b

  2、否则,最大公约数等于b和a%b的最大公约数;即gcd(a,b)=gcd(b,a%b)

code

  1. 1 //功能:求取两个正整数的最大公约数
  2. 2 #include <stdio.h>
  3. 3
  4. 4 //方法1:采用循环,不需要考虑a大还是b大
  5. 5 int gcd1(int a, int b)
  6. 6 {
  7. 7 int r;
  8. 8 while(b > 0){
  9. 9 r = a % b;
  10. 10 a = b;
  11. 11 b = r;
  12. 12 }
  13. 13 return a;
  14. 14 }
  15. 15
  16. 16 //方法2:采用递归算法
  17. 17 int gcd2(int a, int b)
  18. 18 {
  19. 19 return (b>0) ? gcd2(b, a%b) : a;
  20. 20 }
  21. 21
  22. 22
  23. 23 int main(int argc, char *argv[])
  24. 24 {
  25. 25 int a, b, res;
  26. 26 while(1){
  27. 27 printf("please input 2 intergers:\n");
  28. 28 scanf("%d %d", &a, &b);
  29. 29 printf("a=%d, b=%d\n", a, b);
  30. 30
  31. 31 res = gcd1(a, b);
  32. 32 printf("gcd1: the greatest common divisor of %d and %d is: %d\n", a, b, res);
  33. 33
  34. 34 res = gcd2(a, b);
  35. 35 printf("gcd2: the greatest common divisor of %d and %d is: %d\n", a, b, res);
  36. 36
  37. 37 }
  38. 38 }

运行结果截图

663740-20190529145152724-1340007972.png

转载于:https://www.cnblogs.com/shanyu20/p/10943853.html

发表评论

表情:
评论列表 (有 0 条评论,410人围观)

还没有评论,来说两句吧...

相关阅读

    相关 算法-公约数

    摘要:主要用到了辗转相除法(欧几里得算法),更相减损术。 题目:求出两个整数的最大公约数。 方法一: 暴力枚举的方法,试图寻找到一个合适的整数 i,看

    相关 算法-公约数

    最大公约数是一个很经典的数学问题,对于这个问题有四种通用的解法,质因数分解法,短除法,不过比较常用的还是辗转相除法,算法出自于欧几里的著作《几何原本》,还有一个就是出自《九章算

    相关 公约数

    求最大公约数 \\一.题目内容 \\运行最大公约数的常用算法,并进行程序的调式与测试,要求程序设计风格良好,并添加异常处理模块。 \\二.算法设计 \\四种函