求最大公約數的三種算法(java實現)


三種算法:

//歐幾里得算法(輾轉相除):

    public static int gcd(int m,int n) {
        if(m<n) {
            int k=m;
            m=n;
            n=k;
        }
        //if(m%n!=0) {
        //    m=m%n;
        //    return gcd(m,n);
        //}
        //return n;
        return m%n == 0?n:gcd(n,m%n);
    } 

 

    //連續整數檢測算法:

  public static int gcd1(int m,int n) {
        int t;
        if(m<n) {
            t=m;
        }else {
            t=n;
        }
        while(m%t!=0||n%t!=0){
            t--;
        }
        return t;
    }

 

    //公因數法:(更相減損)

    public static int gcd2(int m,int n) {
        int i=0,t,x;
        while(m%2==0&n%2==0) {
            m/=2;
            n/=2;
            i++;
        }
        if(m<n){
            t=m;
            m=n;
            n=t;
        }
        while(n!=(m-n)) {
            x=m-n;
            m=(n>x)?n:x;
            n=(n<x)?n:x;
        }
        if(i==0)
            return n;
        else
            return (int)Math.pow(2, i)*n;
    }

    public static void main(String[] args) {
        System.out.println("請輸入兩個正整數:");
        Scanner scan = new Scanner(System.in);
        Scanner scan2=new Scanner(System.in);
        int m=scan.nextInt();
        int n=scan2.nextInt();
        System.out.println("歐幾里得算法求最大公約數是:"+gcd(m,n));
        System.out.println("連續整數檢測算法求最大公約數是:"+gcd1(m,n));
        System.out.println("公因數法求最大公約數是:"+gcd2(m,n));
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM