求两个数的最大公约数

求两个数的最大公约数

设有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;                         
      }                               
            
全部评论

相关推荐

notbeentak...:就抓,嗯抓,开不开匿名都要抓,一点坏事不让说,就对公司顶礼膜拜佩服的五体投地就对了
点赞 评论 收藏
分享
10-31 13:04
南华大学 Java
嵌入式的小白:很多面试,面试前不会去打扰cto的,但一般cto不会在这些小事上刷人,只能说这个cto比较操心,啥重要不重要,紧急不紧急的,估计都会过问,平淡看待吧
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务