對於輾轉相除法的理解


1.輾轉相除法的使用

例如:

求120和35的最大公約數

有120%35=15

35%15=5

15%5=0

此時5就是120和35的最大公約數

推理可知:

要求兩個數的最大公約數,可用第一個數對第二個數取余,若余數不為0,則用被余數在對余數取余,直到余數為0,此時的被余數就是最大公約數

循環代碼:

#include<iostream>
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
while(b!=0)
{
  int c=a%b;
  if(c==0)
    break;
  a=b;
  b=c;
}
  cout<<b;

  return 0;
}

 

遞歸代碼:

int gcd(int a, int b){
return b == 0 ? a : gcd(b, a % b);
}

2.輾轉相除法的原理

輾轉相除法求最大公約數原理:
設兩數為a、b(a>b),用gcd(a,b)表示a,b的最大公約數,r=a mod b 為a除以b的余數,k為a除以b的商,即a÷b=k.......r。由輾轉相除法的用法可知想證明輾轉相除法即是要證明gcd(a,b)=gcd(b,r)。

第一步:令c=gcd(a,b),則設a=mc,b=nc
第二步:根據前提可知r =a-kb=mc-knc=(m-kn)c
第三步:根據第二步結果可知c也是r的因數
第四步:假設m-kn=xd,n=yd (d>1),則m=kn+xd=kyd+xd=(ky+x)d,則a=mc=(ky+x)cd,b=nc=ycd,則a與b的一個公約數cd>c,故c非a與b的最大公約數,與前面結論矛盾),推出m-kn與n互質,即m - kn 與 n 之間無公因數,又因為r = (m - kn)c , b = nc, 所以r和b的公因數只可能在c中 ,因次c是r,b的最大公因數。
從而可知gcd(b,r)=c,繼而gcd(a,b)=gcd(b,r)。
證畢。
以上步驟的操作是建立在剛開始時r≠0的基礎之上的。即m與n亦互質。

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM