最大公約數定義:兩個不全為0的非負整數m和n的最大公約數記為***(m,n),代表能夠整除(即餘數為0)m和n的最大正整數。
一、歐幾里得演算法
第一步:如果n=0,返回m的值作為結果,同時過程結束;否則進入第二步
第二步:m除以n,將餘數賦給r
第三步:將n的值賦給m,將r的值賦給n,返回第一步
演算法 euclid(m,n)
//使用歐幾里德演算法計算***(m,n)
//輸入:兩個不全為0的非負整數m,n
//輸出:m,n的最大公約數
if n=0
return n
while n!=0 do
r←m mod n
m←nn← r
return n
二、連續整數檢測法
第一步:將min的值賦給t
第二步:m除以t,如果餘數為0,進入第三步;否則進入第四步
第三步:n除以t,如果餘數為0,返回t的值作為結果;否則進入第四步
第四步:把t的值減1。返回第二步
演算法://使用連續整數檢測法計算***(m,n)
//輸入:兩個不全為0的非負整數m,n
//輸出:m,n的最大公約數
if n=0 return n
t=min
while t>0 do
if (m mod t)==0
if (n mod t)==0
return t
else t=t-1
else t=t-1
return t
三、中學中計算***(m,n)的過程
第一步:找到m的所有質因數
第二步:找到n的所有質因數
第三步:從第一步和第二步求得的質因數分解式中找出所有的公因數(如果p是乙個公因數,而且在m和n的質因數分解式分別出現過pm
和pn次,那麼應該將p重複min次)
第四步:將第三步中找到的質因數相乘,其結果作為給定數字的最大公約數
求最大公約數方法
從兩個數a和b中的較小數開始逐個減小1,尋找能整除a和b的整數。第乙個找到的整數即整數a和b的最大公約數。int getpublicmaxnum int a,int b 先用小的乙個數除大的乙個數,得第乙個餘數 再用第乙個餘數除小的乙個數,得第二個餘數 又用第二個餘數除第乙個餘數,得第三個餘數 這樣...
最大公約數簡便演算法 最大公約數演算法
1 查詢約數法 先分別找出每個數的所有約數,再從兩個數的約數中找出公有的約數,其中最大的乙個就是 最大公約數 例如,求 12 和 30 的最大公約數 12 的約數有 1 2 3 4 6 12 30 的約數有 1 2 3 5 6 10 15 30 12 和 30 的公約數有 1 2 3 6,其中 6 ...
求最大公約數
最新用了三種演算法實現了求最大公約數的演算法,用的c 寫的,最大公約數也是我們生活中常見的問題 1 窮舉法 主要 如下 if a b for i 1 i a i 演算法分析 窮舉法先將a,b兩值比較大小並且互換,再進行與各種數的整除,如果這個數能同時被a,b整除,那麼這個數就為最大公約數,這種演算法...