高中计算机辗转相除法,高中数学的辗转相除法问题
滿意答案
smrmhm
2013.06.03
采納率:40%????等級(jí):12
已幫助:12477人
輾轉(zhuǎn)相除法 百科名片 歐幾里德輾轉(zhuǎn)相除法, 又名歐幾里德算法(Euclidean algorithm)乃求兩個(gè)正整數(shù)之最大公因子的算法。它是已知最古老的算法, 其可追溯至3000年前。簡(jiǎn)單的想法 設(shè)兩數(shù)為a、b(b<a),求它們最大公約數(shù)(a、b)的步驟如下:用b除a,得a=bq......r 1(0≤r)。若r1=0,則(a,b)=b;若r1≠0,則再用r1除b,得b=r1q......r2 (0≤r2).若r2=0,則(a,b)=r1,若r2≠0,則繼續(xù)用r2除r1,……如此下去,直到能整除為止。其最后一個(gè)非零余數(shù)即為(a,b)。 原理及其詳細(xì)證明 在介紹這個(gè)方法之前,先說明整除性的一些特點(diǎn)(下文的所有數(shù)都是正整數(shù),不再重覆),我們可以這樣給出整除性的定義: 對(duì)于二個(gè)自然數(shù)a和b,若存在正整數(shù)q,使a=bq,則a能被b整除,b為a的因子,a為b的倍數(shù)。 如果a能被c整除,并且b也能被c整除,則c為a、b的公因數(shù)(公有因數(shù))。 由此我們可以得出以下推論: 推論1、如果a能被b整除(a=qb),若k為正整數(shù),則ka也能被b整除(ka=kqb) 推論2、如果a能被c整除(a=hc),b也能被c整除(b=tc),則(a±b)也能被c整除 因?yàn)?#xff1a;將二式相加: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 因?yàn)?#xff1a;a=qb b=ta a=qta qt=1 因?yàn)閝、t均為正整數(shù),所以t=q=1 所以:a=b 輾轉(zhuǎn)相除法是用來計(jì)算兩個(gè)數(shù)的最大公因數(shù),在數(shù)值很大時(shí)尤其有用,而且應(yīng)用在電腦程式上也十分簡(jiǎn)單。其理論如下: 如果 q 和 r 是 m 除以 n 的商及余數(shù),即 m=nq+r,則 gcd(m,n)=gcd(n,r)。 證明是這樣的: 設(shè) a=gcd(m,n),b=gcd(n,r) 證明: ∵a為m,n的最大公約數(shù), ∴m能被a整除,且n也能被a整除, ∴由推論1得:qn也能被a整除, ∴ 由推論2得:m-qn也能被a整除, 又 ∵m-qn=r, ∴r也能被a整除,即a為n和r的公約數(shù)(注意:還不是最大公約數(shù)) ∵b為n和r的最大公約數(shù),a為n和r的公約數(shù) ∴a≤b, 同理 ∵b為n, r的最大公約數(shù), ∴n能被b整除,且r也能被b整除, ∴由推論1得:qn也能被b整除, ∴由推論2得:qn+r也能被b整除, 又∵m=qn+r, ∴m也能被b整除,即b為m和n的公約數(shù),(注意:還不是最大公約數(shù)) ∵a為m,n的最大公約數(shù),b為m和n的公約數(shù), ∴b≤a, 由以上可知: a≤b與b≤a同時(shí)成立, 故可得 a=b, 證畢。 例如計(jì)算 gcd(546, 429) gcd(546, 429) 546=1*429+117 =gcd(429, 117) 429=3*117+78 =gcd(117, 78) 117=1*78+39 =gcd(78, 39) 78=2*39 =39 [編輯本段]計(jì)算機(jī)算法自然語言描述 輾轉(zhuǎn)相除法是利用以下性質(zhì)來確定兩個(gè)正整數(shù) a 和 b 的最大公因子的: 1. 若 r 是 a ÷ b 的余數(shù), 則 gcd(a,b) = gcd(b,r) 2. a 和其倍數(shù)之最大公因子為 a。 另一種寫法是: 1. a ÷ b,令r為所得余數(shù)(0≤r<b) 若 r = 0,算法結(jié)束;b 即為答案。 2. 互換:置 a←b,b←r,并返回第一步。 流程圖 流程圖(當(dāng)型) 偽代碼 這個(gè)算法可以用遞歸寫成如下: function gcd(a, b) { if b<>0 return gcd(b, a mod b); else return a; } c語言實(shí)現(xiàn) /* 輾轉(zhuǎn)相除法(遞歸)*/ #include int Gcd(int a,int b); int main(void ) { int m,n,t; printf("Enter the two figures:"); scanf("%d %d",&m,&n); printf("Gcd:%d\n",Gcd(m,n)); return 0; } int Gcd(int m,int n)//最大公約數(shù) { int t; if(m
00分享舉報(bào)
總結(jié)
以上是生活随笔為你收集整理的高中计算机辗转相除法,高中数学的辗转相除法问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【docker】docker学习
- 下一篇: 时间的思考---《把时间当作朋友》读后感