更新減損術的Java實現

來源:互聯網
上載者:User

標籤:最大公約數   return   oid   rgs   比較   static   wiki   []   相等   

先來介紹下這個名詞的來源:

 摘自百度百科:

《九章算術》是中國古代的數學專著,其中的“更相減損術”可以用來求兩個數的最大公約數,原文是:可半者半之,不可半者,副置分母、子之數,以少減多,更相減損,求其等也。以等數約之。 白話文譯文:(如果需要對分數進行約分,那麼)可以折半的話,就折半(也就是用2來約分)。如果不可以折半的話,那麼就比較分母和分子的大小,用大數減去小數,互相減來減去,一直到減數與差相等為止,用這個相等的數字來約分。 使用步驟編輯第一步:任意給定兩個正整數;判斷它們是否都是偶數。若是,則用2約簡;若不是則執行第二步。第二步:以較大的數減較小的數,接著把所得的差與較小的數比較,並以大數減小數。繼續這個操作,直到所得的減數和差相等為止。則第一步中約掉的若干個2與第二步中等數的乘積就是所求的最大公約數。其中所說的“等數”,就是最大公約數。求“等數”的辦法是“更相減損”法。 使用執行個體:例1、用更相減損術求98與63的最大公約數。解:由於63不是偶數,把98和63以大數減小數,並輾轉相減:98-63=3563-35=2835-28=728-7=2121-7=1414-7=7所以,98和63的最大公約數等於7。例2、用更相減損術求260和104的最大公約數。解:由於260和104均為偶數,首先用2約簡得到130和52,再用2約簡得到65和26。此時65是奇數而26不是奇數,故把65和26輾轉相減:65-26=3939-26=1326-13=13所以,260與104的最大公約數等於13乘以第一步中約掉的兩個2,即13*2*2=52。  以下是我自己根據演算法做的一個實現,比較繁瑣,但是可以實現功能,先放在這裡,有更好的想法再更新
package com.henu.test;import java.util.HashMap;import java.util.Map;public class MathDemo {    public static void main(String[] args) {        //在這裡輸入你要求的兩個數        Map<String, Object>  map = math(98,63);        for(Map.Entry<String, Object> entry:map.entrySet()){            System.out.println(entry.getKey()+"----"+entry.getValue());        }            }    /**     * 更相減損術     * @param a     * @param b     * @return     */    public static Map<String, Object> math(int a, int b){        Map<String, Object>  map = new HashMap<>();        int count = 0;        int temp = 0;        int max =0;        for(;a%2==0 && b%2==0;){            a=a/2;            b=b/2;            count++;        }        out :        while((a-b>0 && a-b !=b) ||(b>a && b-a != a) || a == b || b-a == a || a - b == b){//        while(a-b==0 || b-a==0){        if (a == b ) {            temp = b;            break out;        }else if ( b>a && b-a != a) {            temp = b-a;            b = temp;        }else if (a-b>0 && a-b !=b) {            temp = a-b;            a = temp;        }else if (b-a == a ) {            temp = a;            break out;        }else if (a - b == b ) {            temp = b;            break out;        }        }        max = (int) Math.pow(2, count) * temp;        //計算到最後a的值        map.put("a", a);        //計算到最後b的值        map.put("b", b);        //表示共同被2整除的次數        map.put("count", count);        //最後求得的最大公約數        map.put("max", max);        return map;    }}

 

原文地址:http://www.cnblogs.com/xiaoguaishou/p/7190489.html

更新減損術的Java實現

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.