(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...