最大公約數的求法


最大公約數,也稱最大公因數、最大公因子,指兩個或多個整數共有約數中最大的一個。解法有很多,現在來總結一下:

1、窮舉法

這是暴力的方法,即選擇兩個數中較小的一個作為遍歷的范圍大小。然后從1開始遍歷,判斷同時滿足是兩個數的因子的數有哪些,然后求出最大值即可。

2、更相減損法

這個思想起源於我國古代的《九章算術》,它原本是為約分而設計的,但它適用於任何需要求最大公約數的場合。原文是這么描述的:“可半者半之,不可半者,副置分母、子之數,以少減多,更相減損,求其等也。以等數約之。”

翻譯成白話將就是:

第一步:對於任意給定的兩個正整數a、b,要求出他們的最大公約數,首先判斷他們倆是否都是偶數(能被2整除),如果都是偶數則一直除以2約簡,直至不能再被2整除,while(a%2==0 && b%2==0){a = a/2;,b=b/2;};

第二步:如果不是,那么就執行下一步,即用較大的數減去較小的數,然后將所得的差值賦值給原先擁有較大值的那個變量,再拿這個變量與較小值的那個變量進行比較,繼續用二者中較大的減去較小的,直到兩個變量相等;

最后,將第一步約簡掉的2依次乘以第二步得到的“等數”就是最大公約數。算法實現代碼如下:

public int gcd_num2(int a,int b){   
    while (a!=b){
         if (a>b){
             a = a-b;
         }else {
             b = b-a;
         }
      }
      return a;
    }

 

3、輾轉相除法

輾轉相除法:輾轉相除法是求兩個自然數的最大公約數的一種方法,也叫歐幾里德算法。對於任意給定的兩個正整數,假設a>b,那么先判斷b是否為0,如果為0,則最大公約數直接就是a,如果不為0,就將兩個整數a與b進行相除,如果余數為0(a%b==0),則b為兩數的最大公約數;如果不等於0,則將b賦值給a,將余數賦值給b,再對新的a、b進行遞歸運算求最大公約數,遞歸的結束條件就是b==0。

    public int gcd_num(int a,int b){
        return b == 0?a:gcd_num(b,a%b);
    }

 

參考自:百度百科

    CyC2018

 


免責聲明!

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



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