求两个数的最大公约数

求两个数的最大公约数

设有a,b两个数,且a>b,求a,b的最大公约数

假如a%b=0,则说明b就是两个数的最大公约数。

假如a%b=r(r不为0),则说明b不是两数的最大公约数,此时,要么两数不存在最大公约数,要么最大公约数小于b。

当最大公约数m存在且小于b时,则最大公约数一定小于r,即有m<r<b<a 设a/b=k…r,因为m是a,b的最大公约数,故设a=xm,b=ym,则r=a-bk=(x-by)*m,即说明余数r也是m的倍数,即说明a,b的最大公约数和a,b,r三个数的最大公约数是一样的,所以求a,b的最大公约数等价于求b,r的最大公约数。 此时,再把b的值赋给a,r的值再赋给b…………往复循环以上步骤,b的值就会不断的减小,直到a%b=0,那么此时b的值就是最大公约数。

特别地,如果a,b不存在最大公约数,那么最后b的值会等于1,因为任何数取模1其结果都是0,而此时a的值是不确定的。

    //a,b取模结果不为0就一直循环
    //当a<b时,第一次循环会交换a,b的位置
    while(a%b)
      {
          //取模获得a,b的余数r
          int r=a%b;
          //把b赋值给a
          a=b;
          //把r的值赋值给b,准备下一轮循环
          b=r;                         
      }                               
            
全部评论

相关推荐

喜欢吃蛋糕仰泳鲈鱼是我的神:字节可以找个hr 给你挂了,再放池子捞
点赞 评论 收藏
分享
10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-27 10:52
点赞 评论 收藏
分享
评论
2
收藏
分享
牛客网
牛客企业服务