問題: 求數a和b的最大公約數.
原理:
1. 大數對小數進行取餘操作, 如果結果為0, 小數為大數的約數.
2. 大數對小數取餘, 如果結果不為0, 則結果必然是導致小數不能成為大數約數的因子.
過程:1. a = a % b; /*用a取餘b, 並將結果儲存在a中. a丟失的那部分資料, 必然是b的n倍, 因此, 不影響求兩數的公約數.*/
2. a = a ^ b;
b = a ^ b;
a = a ^ b; /* 利用位運算, 對a和b進行交換. 交換是為了保證在進行1操作的時候, 除數是大數, 被除數是小數. */
3. 重複1, 2兩步, 直到a % b == 0;
c**:
#include int main() printf("the greatest common divisor is: %d", m); return 0; }
歐幾里德演算法
歐幾里德演算法稱為輾轉相除法,用來求已知m n兩個自然數的公因數。結合程式說明一下輾轉相除的具體情況。首先看遞迴實現 1 int getcd int m,intn 2 6if m if m n 1316 else 1720 主要計算過程分為三個步驟 1 對輸入的兩個自然數m n取餘數r,使得0 r ...
擴充套件歐幾里德演算法
擴充套件歐幾里德演算法已經搞了好幾天了,今天終於看明白,小做總結。講擴充套件歐幾里得演算法之前,先講歐幾里得演算法和貝祖定理。歐幾里得演算法 歐幾里得演算法就是輾轉相除法,即gcd a,b gcd b,a b 簡單證明一下 r gcd a,b a nr,b mr。a b n n m m r。因為gc...
歐幾里德演算法 冪運算
文中x n 表示x的n次方 計算x n 的明顯演算法是使用n 1次乘法自乘,有一種遞迴演算法更好 n 1是這種遞迴的基準情形,否則若n為偶數,我們有x n x n 2 x n 2 若x為奇數,則x n x n 1 2 x n 1 2 x 例如 為了計算x 62 演算法將如下進行,它只用到9次乘法 在...