美文网首页编程之美
BoP——2.7求两个数的最大公约数

BoP——2.7求两个数的最大公约数

作者: Myth52125 | 来源:发表于2017-10-15 20:25 被阅读0次

题目

求两个数的最大公约数。
怎么看都是一个数学的问题,所以还是需要数学的定理公理,来求。

辗转相除法

假设两个整数x,yx>y
那么:
两个数相除商:k=x/y
两个数相除余数:d=x%y
那么使用y表x:x=ky+b

所以如果一个数能够正除y、x,那么这个数一定能够正除b
假设两个数的最大公约数为c,那么x=mc=ky+b,y=nc
所以b=x-ky=mc-knc=c(m-kn)所以,c也是b的一个因数。
参考文章
所以得出

int gcd(int x,inty)
{
  return(!y)?x:gcd(y,x/y);
}

也就是

f(42,30)=f(30,12)=f(12,6)=f(6,0)=6

方法二

改进方法一
对于取模运算开销大,所以将上面的取模运算改为减法

int gcd(int x, int y)
{
  if(x<y)
  {
    return gcd(y,x)
  }
  if(y == 0)
  {
    return x;
  }else{
    return gcd(x-y,y);
  }
}

当时对于(100000,1)这种计算缓慢

方法三

利用2来简化计算。如果两个数都是偶数,那么同除2。
如果其中一个数是偶数,那么该数除2,另一个不变。
如果都不是偶数,那么直接相减,然后递归。
看不太懂,不过方法却是对。

相关文章

  • BoP——2.7求两个数的最大公约数

    题目 求两个数的最大公约数。怎么看都是一个数学的问题,所以还是需要数学的定理公理,来求。 辗转相除法 假设两个整数...

  • 最大公约数C++

    求两个数的最大公约数:

  • python 求最大公约数和最小公倍数

    求两个数的最大公约数和最小公倍数 求三个数的最大公约数和最小公倍数

  • 2.求两个数的最大公约数

    题目:求两个数的最大公约数 方式一:使用辗转相除法求两个数的最大公约数 具体代码如下:这里有两个问题?问题1: 为...

  • 常用的简单函数 ——求最大公约数的函数

    当计算多个数的公约数时,需要知道,前两个的最大公约数,依次和后面的数求公约数,得到的就是所有数字的最大公约数。

  • 实验十:优秀代码

    C : 递归求最大公约数 题目描述写递归函数求两个数的最大公约数优秀代码 D: 编写删除字符串中某个字符的函数--...

  • 最大公约数

    最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。 想求两个数找最大公约数是什么?...

  • 【golang】递归求最大公约数

    首先是求两个数最大公约数的数学原理:   辗转相除法, 又名欧几里德算法,是求最大公约数的一种方法。它的具体做法是...

  • 辗转相除法

    求两个数a和b的最大公约数的算法: 1、如果b等于0,计算结束,a就是最大公约数; 2、否则,计算a除以b的余数,...

  • 欧几里得算法

    欧几里得算法:辗转相除法,用来求两个数的最大公约数。【在数学里面最大公约数是没有负的定义的,所以负数是不谈最大公约...

网友评论

    本文标题:BoP——2.7求两个数的最大公约数

    本文链接:https://www.haomeiwen.com/subject/fogcuxtx.html