91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用Java求最大公約數

發布時間:2021-11-16 11:48:30 來源:億速云 閱讀:142 作者:iii 欄目:大數據

這篇文章主要介紹“怎么用Java求最大公約數”,在日常操作中,相信很多人在怎么用Java求最大公約數問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用Java求最大公約數”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

/**

 * @date 2019/7/25 11:33
 * description:求最大公約數
 */
public class CommonDivisor {

    /**
     * 第一版本
     * 最簡單的想法,找較小數的一半,從大到小,開始試著找出能夠同時兩個數整除最大數
     * 這種方法暴力枚舉,會循環很多次
     *
     * @param a
     * @param b
     * @return
     */
    public static int getGreatestCommonDivisor(int a, int b) {
        int big = a > b ? a : b;
        int small = a < b ? a : b;
        if (big % small == 0) {
            return small;
        }
        for (int i = small / 2; i > 1; i--) {
            if (small % i == 0 && big % i == 0) {
                return i;
            }
        }
        return 1;
    }


    /**
     * 第二版本
     * 歐幾里得算法:輾轉相除法求最大公約數
     * 兩個正數a和b(a>b),它們的最大公約數等于a和b相除的余數c和b的最大公約數  我們可以使用遞歸的方法簡化問題
     * eg 10和25 的最大公約數等于 余數5和10的最大公約數 5
     * 缺點 : 兩個數較大時 a%b的轉換效率低
     *
     * @param a
     * @param b
     * @return
     */
    public static int getGreatestCommonDivisor2(int a, int b) {
        int big = a > b ? a : b;
        int small = a < b ? a : b;
        if (big % small == 0) {
            return small;
        }
        return getGreatestCommonDivisor2(big % small, small);

    }


    /**
     * 第三版本
     * 九章算術
     * 更相減損術 :兩個正整數a,b(a>b),他們的最大公約數等于a-b的差值c和較小數b的最大公約數
     * 缺點:兩數相差很大時,遞歸次數太大
     *
     * @param a
     * @param b
     * @return
     */
    public static int getGreatestCommonDivisor3(int a, int b) {
        if (a == b) {
            return a;
        }
        int big = a > b ? a : b;
        int small = a < b ? a : b;
        return getGreatestCommonDivisor3(big - small, small);

    }


    /**
     * 第四版本
     * 九章算術 更相減損術和輾轉相除法結合起來, 更相減損術上使用位移操作
     * 更相減損術 :兩個正整數a,b(a>b),他們的最大公約數等于a-b的差值c和較小數b的最大公約數
     * 缺點:兩數相差很大時,遞歸次數太大
     *
     * @param a
     * @param b
     * @return
     */
    public static int getGreatestCommonDivisor4(int a, int b) {

        if (a == b) {
            return a;
        }
        if ((a & 1) == 0 && (b & 1) == 0) {
            return getGreatestCommonDivisor4(a >> 1, b >> 1) << 1;
        } else if ((a & 1) == 0 && (b & 1) != 0) {
            return getGreatestCommonDivisor4(a >> 1, b);
        } else if ((a & 1) != 0 && (b & 1) == 0) {
            return getGreatestCommonDivisor4(a, b >> 1);
        } else {
            int big = a > b ? a : b;
            int small = a < b ? a : b;
            return getGreatestCommonDivisor4(big - small, small);
        }
    }

    public static void main(String[] args) {
        System.out.println(getGreatestCommonDivisor4(25, 5));
        System.out.println(getGreatestCommonDivisor4(100, 80));
        System.out.println(getGreatestCommonDivisor4(27, 14));
    }


}

到此,關于“怎么用Java求最大公約數”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

达尔| 莱芜市| 荆州市| 湟中县| 芜湖县| 上栗县| 安徽省| 徐汇区| 大名县| 贡觉县| 宾阳县| 冀州市| 水城县| 察隅县| 博湖县| 寿宁县| 塔城市| 上杭县| 古蔺县| 时尚| 法库县| 自治县| 肥西县| 南溪县| 惠水县| 屏东市| 宜春市| 通江县| 银川市| 云龙县| 清水县| 环江| 蓬安县| 长岛县| 虹口区| 东源县| 涪陵区| 南京市| 河池市| 绍兴市| 吴川市|