用辗转相除法求最大公约数

用辗转相除法求最大公约数 | 火苗999℃的博客

C++代码如下

#include "main.h"
#include 
using namespace std;
int main()
{
    int a, b; int a_cup, b_cup, res;
    cout << "Enter two integer:" << endl; 
    cin >> a ;
    cin >> b ;
    if (a > 0 && b >0) 
    { 
        a_cup = a; 
        b_cup = b; 
        while (b_cup) 
        { 
            res = a_cup % b_cup; 
            a_cup = b_cup; 
            b_cup = res; 
        }
        cout << "Greatest common divisor:" << a_cup << endl; 
        cout << "Lease common multiple :"  <<  a * b / a_cup << endl; 
    } 
    else printf("Error!\n"); 

    getchar();

    return 0;
}
using namespace std;
int main()
{
    int a, b; int a_cup, b_cup, res;
    cout << "Enter two integer:" << endl; 
    cin >> a ;
    cin >> b ;
    if (a > 0 && b >0) 
    { 
        a_cup = a; 
        b_cup = b; 
        while (b_cup) 
        { 
            res = a_cup % b_cup; 
            a_cup = b_cup; 
            b_cup = res; 
        }
        cout << "Greatest common divisor:" << a_cup << endl; 
        cout << "Lease common multiple :"  <<  a * b / a_cup << endl; 
    } 
    else printf("Error!\n"); 

    getchar();

    return 0;
}

辗转相除法的实现,是基于下面的性质:

  1:(a,b)=(a,ka+b),其中a、b、k都为自然数
  就是说,两个数的最大公约数,将其中一个数加到另一个数上,得到的新数组,其公约数不变,比如(4,6)=(4+6,6)=(4,6+2×4)=2。这里有一个比较简单的证明方法来说明这个性质:如果p是a和ka+b的公约数,p整除a,也能整除ka+b。那么就必定要整除b,所以p又是a和b的公约数,从而证明他们的最大公约数也是相等的。

  还有另外一个性质也是很必要:
  2:(0,a)=a
  由这两个性质得到的,就是更相减损术:
  (78,14)=(64,14)=(50,14)=(36,14)=(22,14)=(8,14)=(8,6)=(2,6)=(2,4)=(2,2)=(0,2)=2
  基本上思路就是大数减去小数,一直减到能算出来为止。不过在平时的计算过程中,往往不必计算到最后一步,比如在上面的过程中,到了(8,6),就已经能够看出其结果。
  我们可以看到,在上面的过程中,由(78,14)到(8,14)完全可以一步到位,因为(78,14)=(14×5+8,14)=(8,14),由此就诞生出我们的辗转相除法。
  用辗转相除法求(a,b).设r0=b,r1=a,反复运用除法算式,得到一系列整数qi,ri和下面的方程:


  r0=q1r1+r2,r2<r1(r2,r1)
  r1=q2r2+r3,r3<r2(r3,r2)
  r2=q3r3+r4,r4<r3(r4,r3)
  ………………
  rn-3=qn-2rn-2+rn-1,rn-1<rn-2 (rn-1,rn-2)
  rn-2=qn-1rn-1+rn,rn-2<rn-1 (rn-1,rn)
  rn-1=qnrn。 (rn,0)
  相当于每一步都运用原理①把数字进行缩小,上面右边就是每一步对应的缩小结果,可以看出,最后的余数rn就是a和b的公约数。我们以一个题为例说明基本过程。

  例题:求(326,78)

  326=4×78+14(78,14)

  78=5×14+8 (14,8)

  14=1×8+6 (6,8)

  8=1×6+2 (6,2)

  6=3×2 (0,2)

  所以(326,78)=2。这和我们用更相减损术算出来的结果是一样的。

参考 http://baike.so.com/doc/5939601.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值