Java求兩個自然數的最大公約數

2021-09-22 10:52:37 字數 916 閱讀 9660

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