zoukankan      html  css  js  c++  java
  • 辗转相除法求最大公约数

    辗转相除法求最大公约数

         设两数为a、b(b<a),求它们最大公约数(a,b)的步骤如下:用b除a,得a=bq......r1(0≤r)。若r1=0,则(a,b)=b;若r1≠0,则再用r1除b,得b=r1q......r2 (0≤r2).若r2=0,则(a,b)=r1,若r2≠0,则继续用r2除r1,……如此下去,直到能整除为止。其最后一个非零余数即为(a,b)。

    从某处找的证明:

    原理及其详细证明

      在介绍这个方法之前,先说明整除性的一些特点(下文的所有数都是正整数,不再重覆),我们可以这样给出整除性的定义: 

      对于二个自然数a和b,若存在正整数q,使a=bq,则a能被b整除,b为a的因子,a为b的倍数。 

      如果a能被c整除,并且b也能被c整除,则c为a、b的公因数(公有因数)。 

      由此我们可以得出以下推论: 

      推论1、如果a能被b整除(a=qb),若k为正整数,则ka也能被b整除(ka=kqb) 

      推论2、如果a能被c整除(a=hc),b也能被c整除(b=tc),则(a±b)也能被c整除 

      因为:将二式相加:a+b=hc+tc=(h+t)c 同理二式相减:a-b=hc-tc=(h-t)c 

      所以:(a±b)也能被c整除 

      推论3、如果a能被b整除(a=qb),b也能被a整除(b=ta),则a=b 

      因为:a=qb b=ta a=qta qt=1 因为q、t均为正整数,所以t=q=1 

      所以:a=b

        辗转相除法是用来计算两个数的最大公因数,在数值很大时尤其有用,而且应用在电脑程式上也十分简单。其理论如下: 

      如果 q 和 r 是 m 除以 n 的商及余数,即 m=nq+r,则 gcd(m,n)=gcd(n,r)。 

      证明是这样的: 设 a=gcd(m,n),b=gcd(n,r) 

      证明: 

      ∵a为m,n的最大公约数, 

      ∴m能被a整除,且n也能被a整除, 

      ∴由推论1得:qn也能被a整除, 

      ∴ 由推论2得:m-qn也能被a整除, 

      又 ∵m-qn=r, 

      ∴r也能被a整除,即a为n和r的公约数(注意:还不是最大公约数) 

      ∵b为n和r的最大公约数,a为n和r的公约数 

      ∴a≤b, 

      同理 

      ∵b为n, r的最大公约数, 

      ∴n能被b整除,且r也能被b整除, 

      ∴由推论1得:qn也能被b整除, 

      ∴由推论2得:qn+r也能被b整除, 

      又∵m=qn+r, 

      ∴m也能被b整除,即b为m和n的公约数,(注意:还不是最大公约数) 

      ∵a为m,n的最大公约数,b为m和n的公约数, 

      ∴b≤a, 

      由以上可知: 

      a≤b与b≤a同时成立, 

      故可得 

      a=b, 

      证毕。

  • 相关阅读:
    站立会议(二)
    站立会议(一)
    买书优惠问题
    软件的NABCD----安装部分
    你的灯亮着吗读书笔记(一)
    软件工程概论---环状二维数组最大子数组和
    梦断代码读书笔记(三)
    梦断代码读书笔记(二)
    课程作业3.10
    软件工程作业提交3.06
  • 原文地址:https://www.cnblogs.com/vacation/p/5078139.html
Copyright © 2011-2022 走看看