1. 如何用歐幾里德演算法球32和24的最大公約數
.。
舉個例子來說:
24=10*2+4,那麼(24,10)=(10,4)=2
這個定理的證明也很簡單。
設c是a和b的任意一個公約數。
下面給出一個定理:
若a=bq+r,則(a,b)=(b,r),r)。
定理得證,則c能同時整除a和b,即a=cx,b=cy,a/,:
首先給定兩個數a,去翻翻《近世代數》,r的最大公約數,則根據除法運算,b)=(b,b(a>b)。
於是a和b的公約數就是b和r的公約數,那麼a和b最大公約數就是b和r的最大公約數,(a這個不難,(x,y是整數)
將它們代入「a=bq+r」中:
cx=cyq+r
得到r=c(x-yq),說明c也能整除r..r。q是商,r是余數。
歐幾里德演算法就是對照這個定理來做的..,《數論》,這種書上都有的,我在此稍微寫一下,即c也是b和r的公約數。也可以表示為a=bq+r。這是小學就知道的;b=q,每一次輾轉相除其實就是用了一次上面的定理,一步一步遞推得到最後結果,即a,b的最大公約數等於b
2. 歐幾里德演算法是什麼啊
歐幾里德演算法
歐幾里德演算法又稱輾轉相除法,用於計算兩個整數a,b的最大公約數.其計算原理依賴於下面的定理:
定理:gcd(a,b) = gcd(b,a mod b)
證明:a可以表示成a = kb + r,則r = a mod b
假設d是a,b的一個公約數,則有
d|a,d|b,而r = a - kb,因此d|r
因此d是(b,a mod b)的公約數
假設d 是(b,a mod b)的公約數,則
d | b ,d |r ,但是a = kb +r
因此d也是(a,b)的公約數
因此(a,b)和(b,a mod b)的公約數是一樣的,其最大公約數也必然相等,得證.
歐幾里德演算法就是根據這個原理來做的,其演算法用C++語言描述為:
void swap(int & a,int & b)
{
int c = a;
a = b;
b = c;
}
int gcd(int a,int b)
{
if(0 == a )
{
return b;
}
if( 0 == b)
{
return a;
}
if(a > b)
{
swap(a,b);
}
int c;
for(c = a % b ; c > 0 ; c = a % b)
{
a = b;
b = c;
}
return b;
}
參考資料:internet
3. 什麼是歐幾里得演算法,它有什麼意義
歐幾里得演算法即輾轉相除法,用以求兩個數的最大公約數(或者最小公倍數)
證明如下
假設x,y的最大公約數為d
且設x=k1*d,y=k2*d;
則有z=x-y=(k1-k2)*d;
也必定能被d整除,所以通過兩個數不斷輾轉,直到其中一個變為0為止,以此最終快速得出兩個數的最大公約數。
在演算法的應用上是用求余以加速運算的速度。
總的來說,歐幾里得演算法的意義就是快速求得兩個數的最大公約數。
4. 歐幾里德演算法的介紹
歐幾里德演算法又稱輾轉相除法,用於計算兩個正整數a,b的最大公約數。
5. 歐幾里得演算法——計算最大公因數
計算最大公因數的歐幾里得演算法
最大公因數
最大公因數,也稱最大公約數,指兩個或多個整數共有約數中最大的一個。a,b的最大公約數記為(a,b)。求最大公約數有多種方法,常見的有質因數分解法、輾轉相除法等等。
歐幾里得演算法
歐幾里德演算法又稱輾轉相除法,是指用於計算兩個正整數a,b的最大公約數。應用領域有數學和計算機兩個方面。計算公式gcd(a,b) = gcd(b,a mod b)。歐幾里得演算法在RSA加密演算法中有運用。
源碼
//當N>M時,第一次循環之後兩數將進行交換
int Gcd(int m,int n){
int r;
while(n > 0){
r = m % n;
m = n;
n = r;
}
return m;
}
演算法分析
演算法通過連續計算余數,知道余數是0為止,最後所得的非0餘數就是最大公因數。例如 M=1989 ,N=1590,則余數序列為399,393,6,3,0。因而,Gcd(1989,1590)=3,從余數的序列可知,這是一個快速收斂的演算法。要想得出該演算法的運行時間,就需要確定余數序列究竟有多長?不妨大膽的猜測log(N)看似是非常理想的答案,但是余數序列遞減的規律並非是按照常數因子所遞減的,事實上,數學家們已經證明了,在兩次迭代以後,余數的值最多是原始值的一半。由此可知,迭代次數之多是2log(N) = O(logN)從而得到演算法的時間復雜度。下面,我們從數學家那裡問來了證明過程。
時間復雜度證明
定理:
如果 M > N ,則 M mod N < M/2
證明:如果 N<=M/2 ,則余數小於N,故定理在這種情況下成立
如果 N>M/2 ,此時M僅含有一個N,從而余數為M-N
從上面的例子來看,2logN 大約是20,但是實際上,我們只是運行了7次計算,可能有人會說,這個常數2不是最好的界限值。事實上,歐幾里得演算法的平均時間復雜度是需要大量的數學分析進行證明的,演算法迭代的平均次數是(12ln2lnN)/pi^2+1.47。
有興趣的同學可以研究一下質因數分解等其他演算法哦
6. 歐幾里得演算法是什麼
歐幾里得演算法又稱輾轉相除法,是指用於計算兩個非負整數a,b的最大公約數。應用領域有數學和計算機兩個方面。計算公式gcd(a,b) = gcd(b,a mod b)。
輾轉相除法的演算法步驟為,兩個數中用較大數除以較小數,再用出現的余數除除數。
再用出現的余數(第二餘數)去除第一餘數,如此反復,直到最後余數是0為止。
輾轉相除法是利用以下性質來確定兩個正整數a和b的最大公因子的:
1、若r是a ÷ b的余數,且r不為0,則gcd(a,b) = gcd(b,r)。
⒉、a和其倍數之最大公因子為a。
另一種寫法是:
⒈、令r為a/b所得余數(0≤r),若r= 0,演算法結束;b即為答案。
⒉、互換:置a←b,b←r,並返回第一步。
7. 歐幾里德演算法怎麼使用
若k為整數, 則(a,b) = (a-kb,b).
這是最大公約數的性質, 證明其實不難.
若m為a和b的公約數, 即m | a, m | b.
有m | kb, 於是m | a-kb.
m也是a-kb和b的公約數.
反之若m為a-kb和b的公約數, 同樣可得m也為a和b的公約數.
於是a, b的公約數集合和a-kb, b的公約數集合相同.
最大公約數作為其中最大者自然也是相等的.
8. 歐幾里德演算法的簡單解釋
[編輯本段]歐幾里得演算法的概述 歐幾里德演算法又稱輾轉相除法,用於計算兩個整數a,b的最大公約數。其計算原理依賴於下面的定理: 定理:gcd(a,b) = gcd(b,a mod b) 證明:a可以表示成a = kb + r,則r = a mod b 假設d是a,b的一個公約數,則有 d|a, d|b,而r = a - kb,因此d|r 因此d是(b,a mod b)的公約數 假設d 是(b,a mod b)的公約數,則 d | b , d |r ,但是a = kb +r 因此d也是(a,b)的公約數 因此(a,b)和(b,a mod b)的公約數是一樣的,其最大公約數也必然相等,得證 [編輯本段]歐幾里得演算法原理 Lemma 1.3.1 若 a, b 且 a = bh + r, 其中 h, r , 則 gcd(a, b) = gcd(b, r). 證明. 假設 d1 = gcd(a, b) 且 d2 = gcd(b, r). 我們證明 d1| d2 且 d2| d1, 因而可利用 Proposition 1.1.3(2) 以及 d1, d2 皆為正數得證 d1 = d2. 因 d1| a 且 d1| b 利用 Corollary 1.1.2 我們知 d1| a - bh = r. 因為 d1| b, d1| r 且 d2 = gcd(b, r) 故由 Proposition 1.2.5 知 d1| d2. 另一方面, 因為 d2| b 且 d2| r 故 d2| bh + r = a. 因此可得 d2| d1. Lemma 1.3.1 告訴我們當 a > b > 0 時, 要求 a, b 的最大公因數我們可以先將 a 除以 b 所得餘數若為 r, 則 a, b 的最大公因數等於 b 和 r 的最大公因數. 因為 0r < b < a, 所以當然把計算簡化了. 接著我們就來看看輾轉相除法. 由於 gcd(a, b) = gcd(- a, b) 所以我們只要考慮 a, b 都是正整數的情況. Theorem 1.3.2 (The Euclidean Algorithm) 假設 a, b 且 a > b. 由除法原理我們知存在 h0, r0 使得 a = bh0 + r0, 其中 0r0 < b. 若 r0 > 0, 則存在 h1, r1 使得 b = r0h1 + r1, 其中 0r1 < r0. 若 r1 > 0, 則存在 h2, r2 使得 r0 = r1h2 + r2, 其中 0r2 < r1. 如此繼續下去直到 rn = 0 為止. 若 n = 0 (即 r0 = 0), 則 gcd(a, b) = b. 若 n1, 則 gcd(a, b) = rn - 1. 證明. 首先注意若 r0 0, 由於 r0 > r1 > r2 > ... 是嚴格遞減的, 因為 r0 和 0 之間最多僅能插入 r0 - 1 個正整數, 所以我們知道一定會有 nr0 使得 rn = 0. 若 r0 = 0, 即 a = bh0, 故知 b 為 a 之因數, 得證 b 為 a, b 的最大公因數. 若 r0 > 0, 則由 Lemma 1.3.1 知 gcd(a, b) = gcd(b, r0) = gcd(r0, r1) = ... = gcd(rn - 1, rn) = gcd(rn - 1, 0) = rn - 1. 現在我們來看用輾轉相除法求最大公因數的例子 Example 1.3.3 我們求 a = 481 和 b = 221 的最大公因數. 首先由除法原理得 481 = 2 . 221 + 39, 知 r0 = 39. 因此再考慮 b = 221 除以 r0 = 39 得 221 = 5 . 39 + 26, 知 r1 = 26. 再以 r0 = 39 除以 r1 = 26 得 39 = 1 . 26 + 13, 知 r2 = 13. 最後因為 r2 = 13 整除 r1 = 26 知 r3 = 0, 故由 Theorem 1.3.2 知 gcd(481, 221) = r2 = 13. 在利用輾轉相除法求最大公因數時, 大家不必真的求到 rn = 0. 例如在上例中可看出 r0 = 39 和 r1 = 26 的最大公因數是 13, 利用 Lemma 1.3.1 馬上得知 gcd(a, b) = 13. 在上一節 Corollary 1.2.5 告訴我們若 gcd(a, b) = d, 則存在 m, n 使得 d = ma + nb. 當時我們沒有提到如何找到此 m, n. 現在我們利用輾轉相除法來介紹一個找到 m, n 的方法. 我們沿用 Theorem 1.3.2 的符號. 首先看 r0 = 0 的情形, 此時 d = gcd(a, b) = b 所以若令 m = 0, n = 1, 則我們有 d = b = ma + nb. 當 r0 0 但 r1 = 0 時, 我們知 d = gcd(a, b) = r0. 故利用 a = bh0 + r0 知, 若令 m = 1, n = - h0, 則 d = r0 = ma + nb. 同理若 r0 0, r1 0 但 r2 = 0, 則知 d = gcd(a, b) = r1. 故利用 a = bh0 + r0 以及 b = r0h1 + r1 知 r1 = b - r0h1 = b - (a - bh0)h1 = - h1a + (1 + h0h1)b. 因此若令 m = - h1 且 n = 1 + h0h1, 則 d = r1 = ma + nb. 依照此法, 當 r0, r1 和 r2 皆不為 0 時, 由於 d = gcd(a, b) = rn - 1 故由 rn - 3 = rn - 2hn - 1 + rn - 1 知 d = rn - 3 - hn - 1rn - 2. 利用前面推導方式我們知存在 m1, m2, n1, n2 使得 rn - 3 = m1a + n1b 且 rn - 2 = m2a + n2b 故代入得 d = (m1a + n1b) - hn - 1(m2a + n2b) = (m1 - hn - 1m2)a + (n1 - hn - 1n2)b. 因此若令 m = m1 - hn - 1m2 且 n = n1 - hn - 1n2, 則 d = ma + nb. 上面的說明看似好像當 r0 0 時對每一個 i {0, 1,..., n - 2} 要先將 ri 寫成 ri = mia + nib, 最後才可將 d = rn - 1 寫成 ma + nb 的形式. 其實這只是論證時的方便, 在實際操作時我們其實是將每個 ri 寫成 mi'ri - 2 + ni'ri - 1 的形式慢慢逆推回 d = ma + nb. 請看以下的例子. Example 1.3.4 我們試著利用 Example 1.3.3 所得結果找到 m, n 使得 13 = gcd(481, 221) = 481m + 221n. 首先我們有 13 = r2 = 39 - 26 = r0 - r1. 而 r1 = 221 - 5 . 39 = b - 5r0, 故得 13 = r0 - (b - 5r0) = 6r0 - b. 再由 r0 = 481 - 2 . 221 = a - 2b, 得知 13 = 6(a - 2b) - b = 6a - 13b. 故得 m = 6 且 n = - 13 會滿足 13 = 481m + 221n. 要注意這里找到的 m, n 並不會是唯一滿足 d = ma + nb 的一組解. 雖然上面的推演過程好像會只有一組解, 不過只能說是用上面的方法會得到一組解, 並不能擔保可找到所有的解. 比方說若令 m' = m + b, n' = n - a, 則 m'a + n'b = (m + b)a + (n - a)b = ma + nb = d. 所以 m', n' 也會是另一組解. 所以以後當要探討唯一性時, 若沒有充分的理由千萬不能說由前面的推導過程看出是唯一的就斷言是唯一. 一般的作法是假設你有兩組解, 再利用這兩組解所共同滿足的式子找到兩者之間的關系. 我們看看以下的作法. Proposition 1.3.5 假設 a, b 且 d = gcd(a, b). 若 x = m0, y = n0 是 d = ax + by 的一組整數解, 則對任意 t , x = m0 + bt/d, y = n0 - at/d 皆為 d = ax + by 的一組整數解, 而且 d = ax + by 的所有整數解必為 x = m0 + bt/d, y = n0 - at/d 其中 t 這樣的形式. 證明. 假設 x = m, y = n 是 d = ax + by 的一組解. 由於已假設 x = m0, y = n0 也是一組解, 故得 am + bn = am0 + bn0. 也就是說 a(m - m0) = b(n0 - n). 由於 d = gcd(a, b), 我們可以假設 a = a'd, b = b'd 其中 a', b' 且 gcd(a', b') = 1 (參見 Corollary 1.2.3). 因此得 a'(m - m0) = b'(n0 - n). 利用 b'| a'(m - m0), gcd(a', b') = 1 以及 Proposition 1.2.7(1) 得 b'| m - m0. 也就是說存在 t 使得 m - m0 = b't. 故知 m = m0 + b't = m0 + bt/d. 將 m = m0 + bt/d 代回 am + bn = am0 + bn0 可得 n = n0 - at/d, 因此得證 d = ax + by 的整數解都是 x = m0 + bt/d, y = n0 - at/d 其中 t 這樣的形式. 最後我們僅要確認對任意 t , x = m0 + bt/d, y = n0 - at/d 皆為 d = ax + by 的一組整數解. 然而將 x = m0 + bt/d, y = n0 - at/d 代入 ax + by 得 a(m0 + bt/d )+ b(n0 - at/d )= am0 + bn0 = d, 故得證本定理. 利用 Proposition 1.3.5 我們就可利用 Example 1.3.4 找到 13 = 481x + 221y 的一組整數解 x = 6, y = - 13 得到 x = 6 + 17t, y = - 13 - 37t 其中 t 是 13 = 481x + 221y 所有的整數解
希望採納
9. 歐幾里德演算法
The Euclidean Algorithm
歐幾里德演算法(又稱輾轉相除法)是一種用於快速尋找兩個整數的最大公約數的技巧。
最大公約數 Greatest Common Divisor (GCD):整數 A 和 B 的最大公約數是指能夠同時整除 A 和 B 的最大整數。
使用歐幾里德演算法尋找 GCD(A,B) 的過程如下:
歐幾里德演算法使用了下述特性:
如果 A 和 B 其中一個為 0,便可利用前兩個特性得出 GCD。 第三個特性幫助我們將大而復雜的問題化簡為小而容易解決的問題。 歐幾里德演算法先利用第三個特性迅速化簡問題,直至可以通過前兩個特性求解為止。
證明 GCD(A,0)=A 的過程如下:
GCD(0,B)=B 的證明過程與此類似,區別僅在於用 B 替換 A。
先證明較簡單的 GCD(A,B)=GCD(B,A-B),再證明 GCD(A,B)=GCD(B,R)
根據定義 GCD(A,B) 可均分 A。因此,A 一定是 GCD(A,B) 的倍數,即 X⋅GCD(A,B)=A ,此處的 X 是某個整數。 根據定義 GCD(A,B) 可均分 B。因此,B 一定是 GCD(A,B) 的倍數,即 Y⋅GCD(A,B)=B ,此處的 Y 是某個整數。
根據 A-B=C 可得出:
由此可見 GCD(A,B) 可均分 C。 上圖的左側部分展示了此證明,提取如下:
證明 GCD(B,C) 均分 A
根據定義 GCD(B,C) 可均分 B。因此,B 一定是 GCD(B,C) 的倍數,即 M⋅GCD(B,C)=B ,此處的 M 是某個整數。 根據定義 GCD(B,C) 可均分 C。因此,C 一定是 GCD(B,C) 的倍數,即 N⋅GCD(B,C)=B ,此處的 N 是某個整數。
根據 A-B=C 可得出:
B+C=A
M⋅GCD(B,C) + N⋅GCD(B,C) = A
(M + N)⋅GCD(B,C) = A
由此可見 GCD(B,C) 可均分 A。 下圖展示了此證明:
證明 GCD(A,B)=GCD(A,A-B)
根據定 GCD(A,B) 均分 B
同時,已證明 GCD(A,B) 均分 C
因此,GCD(A,B) 是 B 和 C 的公約數
由於 GCD(B,C) 是 B 和 C 的最大公約數,所以 GCD(A,B) 必須小於或等於 GCD(B,C)。
根據定義 GCD(B,C) 均分 B
同時,已證明 GCD(B,C) 均分 A
因此,GCD(B,C) 是 B 和 A 的公約數
由於 GCD(A,B) 是 A 和 B 的最大公約數,所以 GCD(B,C) 必須小於或等於 GCD(A,B)。
∵ GCD(A,B)≤GCD(B,C) 且 GCD(B,C)≤GCD(A,B) ∴ GCD(A,B)=GCD(B,C) 即 GCD(A,B)=GCD(B,A-B)
下圖的右側部分展示了此證明的圖示:
前面已證明了 GCD(A,B)=GCD(B,A-B) 另外,對於 GCD( ) 而言,括弧中各項的順序並不重要,因此 GCD(A,B)=GCD(A-B,B) 那麼,如果反復應用 GCD(A,B)=GCD(A-B,B),便可得到: GCD(A,B)=GCD(A-B,B)=GCD(A-2B,B)=GCD(A-3B,B)=...=GCD(A-Q⋅B,B) 由於 A= B⋅Q + R 可得 A-Q⋅B=R,所以 GCD(A,B)=GCD(R,B) 。 由於括弧中各項的順序並不重要,因此最終可得: GCD(A,B)=GCD(B,R)
找尋 270 和 192 的最大公約數:
A=270, B=192
A=192, B=78
A=78, B=36
A=36, B=6
A=6, B=0
從上面的過程可以看出: ∵ GCD(270,192) = GCD(192,78) = GCD(78,36) = GCD(36,6) = GCD(6,0) = 6 ∴ GCD(270,192) = 6
10. 歐幾里德演算法本質的數學原理是什麼
歐幾里德演算法
歐幾里德演算法又稱輾轉相除法,用於計算兩個整數a,b的最大公約數。其計算原理依賴於下面的定理:
定理:gcd(a,b) = gcd(b,a mod b)
證明:a可以表示成a = kb + r,則r = a mod b
假設d是a,b的一個公約數,則有
d|a, d|b,而r = a - kb,因此d|r
因此d是(b,a mod b)的公約數
假設d 是(b,a mod b)的公約數,則
d | b , d |r ,但是a = kb +r
因此d也是(a,b)的公約數
因此(a,b)和(b,a mod b)的公約數是一樣的,其最大公約數也必然相等,得證。
歐幾里德演算法就是根據這個原理來做的,其演算法用C++語言描述為:
void swap(int & a, int & b)
{
int c = a;
a = b;
b = c;
}
int gcd(int a,int b)
{
if(0 == a )
{
return b;
}
if( 0 == b)
{
return a;
}
if(a > b)
{
swap(a,b);
}
int c;
for(c = a % b ; c > 0 ; c = a % b)
{
a = b;
b = c;
}
return b;
}
參考資料:internet