Python實現求兩數最大公約數 四種方法

2021-10-01 10:30:47 字數 1145 閱讀 8558

(1) 兩數求餘temp = p % q

(2) temp = 0時,q為最大公約數

(3) temp !=0時,p = q;q = temp注:該迴圈的是否繼續的判斷條件就是temp是否為0

def fuc(p, q):

temp = p % q

while temp!=0:

p = q

temp = p

q = temp % q

return q

(1) 如果p > q ,p = p - q

(2) 如果q > p ,q = q - p

(3) 假如p = q ,則 p或q 是最大公約數

(4) 如果p != q,則繼續繼續相減,直至p = q

def fuc2(p, q):

while p!=q:

if p>q:

p = p - q

else:

q = q - p

return p

(1) 將兩數p,q中最小的放到smaller中

(2) 用p,q分別對i(1到smaller之間)求餘數,看是否能被整除

(3) 直到p,q同時被i整除

(4) 如不能整除,i+1後繼續,直到i等於smaller

def fuc3(p, q):

if p>q:

smaller = q

else:

smaller = p

for i in range(1, smaller+1):

if (p%i == 0) and (q%i == 0):

ret = i

return ret

該方法其實就是輾轉相除法的遞迴版本實現

(1) 如果q=0,返回p;判斷p>q

(2) 如果p>q,則p、q的最大公約數等於q與p%q的最大公約數,以此遞迴

def fuc4(p, q):

if q == 0:

return p

return fuc4(q, p % q)

第四種方法是不是**最少,可以說是極簡版,而且效能適中。但是當p,q數值較大時,遞迴效率效率可能就不太佔優勢了。

輾轉相除法求兩數最大公約數

輾轉相除法是求兩個自然數的最大公約數的一種方法,也叫歐幾里德演算法。例如,求 319,377 319 377 0 餘319 319,377 377,319 377 319 1 餘58 377,319 319,58 319 58 5 餘29 319,58 58,29 58 29 2 餘0 58,29 ...

求最大公約數

最新用了三種演算法實現了求最大公約數的演算法,用的c 寫的,最大公約數也是我們生活中常見的問題 1 窮舉法 主要 如下 if a b for i 1 i a i 演算法分析 窮舉法先將a,b兩值比較大小並且互換,再進行與各種數的整除,如果這個數能同時被a,b整除,那麼這個數就為最大公約數,這種演算法...

求最大公約數

暴力列舉法很簡單,從較小整數的一班開始,試圖找到乙個合適的整數i,檢查這個整數i是否被a和b同時整除 暴力列舉法求最大公約數 param a param b return public static int getgreatestcommondivisor v1 int a,int b for in...