歐幾里得演算法(輾轉相除法)求最大公約數,原理及例項

2021-10-17 10:22:37 字數 3014 閱讀 8702

假如需要求 1997 和 615 兩個正整數的最大公約數,用歐幾里得演算法,是這樣進行的:

1997 / 615 = 3 (餘 152)

615 / 152 = 4(餘7)

152 / 7 = 21(餘5)

7 / 5 = 1 (餘2)

5 / 2 = 2 (餘1)

2 / 1 = 2 (餘0)

至此,最大公約數為1

以除數和餘數反覆做除法運算,當餘數為 0 時,取當前算式除數為最大公約數,所以就得出了 1997 和 615 的最大公約數 1。

下面給個例項,題目是《python語言程式設計》這本書第四章的課後題

最大公約數計算。獲得兩個整數,求出這兩個整數的最大公約數和最小公倍數。最大公約數的計算一般使用輾轉相除法,最小公倍數則使用兩個數的乘積除以最大公約數。

**是自己寫的,感覺有些冗餘,僅供參考:

a=

eval

(input

('請輸入乙個數:'))

b=eval

(input

('請輸入另乙個數:'))

d=a*b

if a>b:

while a%b!=0:

c=a%b

a=bb=c

e=int(d/b)

print

('兩個數的最大公約數為:'

+str

(b)+

'\n兩個數的最小公倍數為:'

+str

(e))

elif awhile b%a!=0:

c=b%a

b=aa=c

e=int(d/a)

print

('兩個數的最大公約數為:'

+str

(a)+

'\n兩個數的最小公倍數為:'

+str

(e))

else

:print

('最大公約數與最小公倍數都是'

+str

(a))

部分執行結果如下,看起來還可以。要更加完善的話可以及加上while可持續輸入和break切出功能,以及加個try except處理輸入型別不正確的情況,不至於把traceback暴露在使用者面前:

>>

>

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

== restart: c:

/users/matebook/desktop/python練習/hw4.

2.py ==

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

*****==

請輸入乙個數:12

請輸入另乙個數:10

兩個數的最大公約數為:2

兩個數的最小公倍數為:60

>>

>

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

== restart: c:

/users/matebook/desktop/python練習/hw4.

2.py ==

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

*****==

請輸入乙個數:10

請輸入另乙個數:12

兩個數的最大公約數為:2

兩個數的最小公倍數為:60

>>

>

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

== restart: c:

/users/matebook/desktop/python練習/hw4.

2.py ==

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

====

*****==

請輸入乙個數:10

請輸入另乙個數:10

最大公約數與最小公倍數都是10

>>

>

(C )求最大公因子(輾轉相除法)

具體演算法也可以看這篇 求任意兩個整數m,n最大公因子 m,n 的方法如下 若 m n q r 其中 r為餘數,滿足 0 r n 1 則 m,n n,r 且當 r 0時,m,n n 按照這種方法,可以快速而方便地求出任意兩個整數的最大公因子。例如,1500,550 的求解過程如下 1500,550 ...

輾轉相除法求最大公約數

之前總結過一次高德納taocp中的最大公約數求解,其實課後題中的演算法修改要求實現的是輾轉相除法求解最大公約數。這個題目我最初的理解理解錯了,自然也沒有做出標準答案。現在按照標準答案的解答寫一下相應的 實現 defmaxcommdivisor m,n while m n 0 m m n if m 0...

求最大公約數 輾轉相除法

設求a和b的最大公約數c 則可看做邊長分別為a和b的矩形,可恰好被邊長為c的正方形無縫隙填滿 方法 不斷地用長邊除以短邊取餘數,直到長邊與短邊相等,即為所求正方形 給定平面上的兩個格點p1 x1,y1 p2 x2,y2 線段p1p2上,除p1和p2以外一共有幾個點。示例 p1 3,9 p2 7,1 ...