求最大公約數 歐幾里德演算法(即 輾轉相除法 )

2021-07-29 12:12:11 字數 707 閱讀 7975

定理:兩個整數的最大公約數等於其中較小的那個數和兩數相除餘數的最大公約數。

證明:

a可以表示成a = kb + r(a,b,k,r皆為正整數,且

r<

b ),則r = a mod b

假設d是a,b的乙個公約數,記作d|a,d|b,即a和b都可以被d整除。 而r

=a−k

b ,兩邊同時除以d,r/

d=r∗

(1/d

)=(a

−kb)

∗(1/

d)=a

/d−k

b/d=

m ,由a/d-kb/d可知m為整數,因此d|r

因此d也是b, r=a mod b的公約數

則a/d=(kb+r)/d=kb/d+r/d , 其中k是乙個整數,

進而得d|a.因此d也是a,b的公約數

因此(a,b)和(b,a mod b)的公約數是一樣的,其最大公約數也必然相等,得證

求法:以小數除大數,如果能整除,那麼小數就是所求的最大公約數.否則就用餘數來除剛才的除數;再用這新除法的餘數去除剛才的餘數.依此類推,直到乙個除法能夠整除,這時作為除數的數就是所求的最大公約數.

#include

int main()

printf("%d",a/b);

return

0;}

Euclide 歐幾里德 演算法求最大公約數

問題 求數a和b的最大公約數.原理 1.大數對小數進行取餘操作,如果結果為0,小數為大數的約數.2.大數對小數取餘,如果結果不為0,則結果必然是導致小數不能成為大數約數的因子.過程 1.a a b 用a取餘b,並將結果儲存在a中.a丟失的那部分資料,必然是b的n倍,因此,不影響求兩數的公約數.2.a...

輾轉相除求最大公約數

什麼叫輾轉相除法求最大公約數 輾轉相除法求兩個數的最大公約數的步驟如下 先用大的乙個數除大的乙個數,得第乙個餘數 再用兩個數中較小的乙個數除第乙個餘數,得第二個餘數 又用第乙個餘數除第二個餘數,得第三個餘數 這樣逐次用後乙個數去除前乙個餘數,直到餘數是0為止。那麼,最後乙個除數就是所求的最大公約數 ...

輾轉相除求最大公約數

限制 總時間限制 1000ms 記憶體限制 65536kb 描述 給定兩個正整數,求它們的最大公約數。輸入 輸入一行,包含兩個正整數 1,000,000,000 輸出 輸出乙個正整數,即這兩個正整數的最大公約數。樣例輸入 6 9樣例輸出 3提示 求最大公約數可以使用輾轉相除法 假設a b 0,那麼a...