處理最大公因數時十分好用(但是我證不出來。。)
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,intb)
一道例題:(點選收穫rp++)
很簡單啦。。解釋寫成注釋了
#include#includeusing
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...