[求最大公約數]暴力破解法和輾轉相除法
阿新 • • 發佈:2021-02-13
[求最大公約數]暴力破解法和輾轉相除法
1.暴力破解
public class gcd {
public static void main(String[] args) {
int a=15;
int b=40;
for(int i=a;i>=1;i--) {
if(a%i==0 && b%i==0) {
System.out.println(i);
break;}//不要漏掉break,找到第一個數立即停止迴圈
}
}
原理: 即選取兩數中較小的數作為迴圈基準來找最大公約數,迴圈體中若找到的第一個可使兩數取餘數均為0的數即為兩數的最小公約數
2.輾轉相除法
背景: 輾轉相除法, 又名歐幾里德演算法(Euclidean algorithm),是求兩個正整數之最大公約數的演算法。它是已知最古老的演算法, 其可追溯至公元前300年前。它的具體做法是:用較大數除以較小數,再用出現的餘數(第一餘數)去除除數,再用出現的餘數(第二餘數)去除第一餘數,如此反覆,直到最後餘數是0為止。如果是求兩個數的最大公約數,那麼最後的除數就是這兩個數的最大公約數。
public class gcd1 {
public static int gcd1(int a,int b) {
if(a==0)return b;
return gcd1(b%a,a);
}
public static void main(String[] args) {
System.out.println(gcd1(15,40));
}
}
原理圖:
優越處:
輾轉相除法函式不必刻意規定前一個數一定比後一個數小,兩數位置隨意,不影響最後結果