模板 輾轉相除法

2022-09-17 23:33:20 字數 852 閱讀 8664

處理最大公因數時十分好用(但是我證不出來。。)

gcd(a,b)=gcd(b,a mod b) (b>0)

設兩數為a、b(a>b),用gcd(a,b)表示a,b的最大公約數,r=a (mod b) 為a除以b的餘數,k為a除以b的商,即a÷b=kr。輾轉相除法即是要證明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與n互質(假設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的最大公約數,與前面結論矛盾),因此c也是b與r的最大公約數。

從而可知gcd(b,r)=c,繼而gcd(a,b)=gcd(b,r)。

還挺好懂的啊。。

大概過程就是當a%b=0時說明b是最小公因數

看看**吧。。

int gcd(int a,int

b)

一道例題:(點選收穫rp++)

很簡單啦。。解釋寫成注釋了

#include#include

using

namespace

std;

intn,m;

intans;

int gcd(int a,int

b)int

main()

cout

<2

;

return0;

}

(rp++!)

輾轉相除法原理

輾轉相除法原理 假設有兩個數x和y,存在乙個最大公約數z x,y 即x和y都有公因數z,那麼x一定能被z整除,y也一定能被z整除,所以x和y的線性組合mx ny也一定能被z整除。m和n可取任意整數 對於輾轉相除法來說,思路就是 若x y,設x y n餘c,則x能表示成x ny c的形式,將ny移到左...

約分 輾轉相除法

include using namespace std int main int temp1 int temp2 cin temp1 temp2 int a temp1 int b temp2 while b 0 int temp a b a b b temp cout 輾轉相除法 輾轉相除法是求兩...

輾轉相除法的證明

輾轉相除法的證明 設兩數為a b b a 求它們最大公約數的步驟如下 用b除a,得a bq r 0 r b q是這個除法的商 若r 0,則b是a和b的最大公約數。若r 0,則繼續考慮。首先,應該明白的一點是任何 a 和 b 的公約數都是 r 的公約數。要想證明這一點,就要考慮把 r 寫成 r a b...