美文网首页
辗转相除求最大公约数

辗转相除求最大公约数

作者: coder_那一抹刚吹过的风 | 来源:发表于2016-04-06 17:41 被阅读103次

作为一个数学很渣的人,我表示学习算法真是有点困难,虽然万事开头难,我还是迈出了第一步,以后我尽量保证一天跟新一个算法,当然,复杂的我会分成好几篇来写,尽量保持一天一更新的速率。

说起其最大公约数,这个并不是什么高难度的事情。首先我跟大家说一下我的想法:
最大公约数肯定小于两个被求数,所以我们直接之求出两个数所有的数,最后比较大小就可以了。代码如下:

int max = 0;
for (int i = 1; i <= num1; i++) {
    if (num1 % i == 0 && num2 % i == 0) {
        max = i;
    }
}
return max;

这个算法,知道辗转相除法之后,应该就只剩下我用了。
下面介绍一下原理:
若 a,b 且 a = bh + r,其中 h,r,则 gcd(a,b) = gcd(b,r). --《百度百科》

至于证明大家可以常看网上的,这里我就不再粘贴了。

大家看一下我的实现,虽然没有网上大牛的6,但是我个人还是觉得可以的。

    int gcd(int num1, int num2)
    {
          if (num1 % num2 == 0) {
                  return num2;
          }
          int r = num1 % num2;
          return gcd(num2, r);
     }

好了,开开心心完成今天的更新,安心去吃饭了。

相关文章

网友评论

      本文标题:辗转相除求最大公约数

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