1. 程式人生 > 其它 >[求最大公約數]暴力破解法和輾轉相除法

[求最大公約數]暴力破解法和輾轉相除法

技術標籤:java演算法gcd

[求最大公約數]暴力破解法和輾轉相除法

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)); } }

原理圖:
在這裡插入圖片描述

優越處:
輾轉相除法函式不必刻意規定前一個數一定比後一個數小,兩數位置隨意,不影響最後結果