1、遞減法,時間複雜度有點高:o(n)
public class maximum
private static string getcommonnum(integer a, integer b)
if(a.compareto(b) == 0) else
int c = b;
while (c > 1)
c--;//c從b開始遞減;
}return "最大公約數為:" + c;}}
}
2、輾轉相除法,效率高
private static string getcommonnum1(integer a, integer b)
return getcommonnum1(b, a%b);
}
原理: 利用遞迴方式找到最大公約數
1:a/b = q 餘數是r1
如果r1 = 0,則說明a是b的整數倍,最大公約數就應該是b
如果r1 != 0,則說明a不是b的整數倍,b/r1 = p餘數是r2
如果r2 =0,則說明最大公約數就應該是r1
如果r2 !=0, 則說明最大公約數不是r1, 繼續上述操作。r1/r2=w...r3
如果r3.......
例子:(12,10)
12/10=1...2
(10,2)
10/2=5...0
此時進入遞迴a=2,b=0時遇到**if(b == 0) 跳出迴圈最大公約數為2.
3、交替相減法;最大時間複雜度也很高。
private static string getcommonnum2(integer a, integer b)if(a > b) else
}
三種不同的演算法求兩個自然數的最大公約數
一 實驗目的 1 熟悉演算法求解問題的過程 2 練習使用不同演算法求解同一問題,並對演算法進行分析 二 實驗內容 1 使用三種不同的演算法求兩個自然數的最大公約數。2.對三種演算法的時間複雜度進行分析。第一種 歐幾里得輾轉相除法偽 描述 if m第二種 輾轉相減法偽 描述 if m第三種 窮舉法偽 ...
Java求兩個數的最大公約數
輾轉相除法 當兩個數都較大時,採用輾轉相除法比較方便 其方法是 以小數除大數,如果能整除,那麼小數就是所求的最大公約數 否則就用餘數來除剛才的除數 再用這新除法的餘數去除剛才的餘數 依此類推,直到乙個除法能夠整除,這時作為除數的數就是所求的最大公約數 例如 求4453和5767的最大公約數時,可作如...
求兩個數最大公約數
題目 寫乙個程式,求兩個正數的最大公約數。如1100100210001,120200021,求其最大公約數 分析 設兩個數分別為x,y 求其最大公約數f x,y 如果有x 2 0而y 2不等於0,那麼可以 約簡為f x 2,y 同樣道理適用於y 如果x與y都是偶數,那麼最大公約數可以為f x 2,y...