辗转相除求最大公约数

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

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

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);
     }

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 最大公约数(GCD, Greatest Common Divisor,为简便下文都使用GCD表示最大公约数):指某...
    JxYoung阅读 15,236评论 8 16
  • 基本概念 因数 :若A=m×n,则称m,n是A的因数;A是m,n的倍数 一个数的最大因数和最小倍数都...
    AQ王浩阅读 2,182评论 0 4
  • 本文要证明的题目是欧几里得法(碾转相除法)求得的结果是两个数的最大公约数,本文用gcd(a,b)来表示最大公约数。...
    YongpingZhao阅读 1,552评论 0 0
  • 突然想起一句话:每天早上醒来,看见阳光和你都在,那就是我想要的未来。 昨晚做了一个梦,你穿着白色的衬衣,向着我走来...
    黄旋君阅读 434评论 0 0
  • 明月起相思,入骨知不知。
    浮偌阅读 271评论 2 3