• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 71,  comments - 41,  trackbacks - 0
            先貼點人家的教學資料


            求最大公約數九法

            湖南省武岡市教研室 周定武

              一、觀察法

              運用能被2、3、5整除的數的特征進行觀察.

              例如,求225和105的最大公約數.因為225、105都能被3和5整除,所以225和105至少含有公約數(3×5)15.因為225÷15=15,105÷15=7.15與7互質,所以225和105的最大公約數是15.

              二、查找約數法
            先分別找出每個數的所有約數,再從兩個數的約數中找出公有的約數,其中最大的一個
            就是最大公約數.

              例如,求12和30的最大公約數.
            12的約數有:1、2、3、4、6、12;
            30的約數有:1、2、3、5、6、10、15、30.
            12和30的公約數有:1、2、3、6,其中6就是12和30的最大公約數.

              三、分解因式法

              先分別把兩個數分解質因數,再找出它們全部公有的質因數,然后把這些公有質因數相乘,得到的積就是這兩個數的最大公約數.

              例如:求125和300的最大公約數.因為125=5×5×5,300=2×2×3×5×5,所以125和300的最大公約數是5×5=25.

              四、關系判斷法

              當兩個數關系特殊時,可直接判斷兩個數的最大公約數.例如,兩個數互質時,它們的最大公約數就是這兩個數的乘積;兩個數成倍數關系時,它們的最大公約數就是其中較小的那個數.

              五、短除法

              為了簡便,將兩個數的分解過程用同一個短除法來表示,那么最大公約數就是所有除數的乘積.

              例如:求180和324的最大公約數.

              因為:

              5和9互質,所以180和324的最大公約數是4×9=36.

              六、除法法

              當兩個數中較小的數是質數時,可采用除法求解.即用較大的數除以較小的數,如果能夠整除,則較小的數是這兩個數的最大公約數.

              例如:求19和152,13和273的最大公約數.因為152÷19=8,273÷13=21.(19和13都是質數.)所以19和152的最大公約數是19,13和273的最大公約數是13.

              七、縮倍法

              如果兩個數沒有之間沒有倍數關系,可以把較小的數依次除以2、3、4……直到求得的商是較大數的約數為止,這時的商就是兩個數的最大公約數.例如:求30和24的最大公約數.24÷4=6,6是30的約數,所以30和24的最大公約數是6.

               八、求差判定法

              如果兩個數相差不大,可以用大數減去小數,所得的差與小數的最大公約數就是原來兩個數的最大公約數.例如:求78和60的最大公約數.78-60=18,18和60的最大公約數是6,所以78和60的最大公約數是6.

              
            如果兩個數相差較大,可以用大數減去小數的若干倍,一直減到差比小數小為止,差和
            小數的最大公約數就是原來兩數的最大公約數.例如:求92和16的最大公約數.92-1676,76-16=60,60-16=44,44-16=28,28-16=12,12和16的最大公約數是4,所以92和16的最大公約數就是4.

              九、輾轉相除法

              當兩個數都較大時,采用輾轉相除法比較方便.其方法是:

              以小數除大數,如果能整除,那么小數就是所求的最大公約數.否則就用余數來除剛才的除數;再用這新除法的余數去除剛才的余數.依此類推,直到一個除法能夠整除,這時作為除數的數就是所求的最大公約數.

              例如:求4453和5767的最大公約數時,可作如下除法.

              5767÷4453=1余1314

              4453÷1314=3余511

              1314÷511=2余292

              511÷292=1余219

              292÷219=1余73

              219÷73=3

              于是得知,5767和4453的最大公約數是73.

              輾轉相除法適用比較廣,比短除法要好得多,它能保證求出任意兩個數的最大公約數.




            小學數學溫習過后,先來個兩個數遞歸版的

            int?GetGCDRec(int?n,?int?m)
            {
            ????
            if?(m?<?n)
            ????
            {
            ????????m?
            ^=?n;
            ????????n?
            ^=?m;
            ????????m?
            ^=?n;
            ????}


            ????
            if?(n?==?0)
            ????????
            return?m;
            ????
            else
            ????????
            return?GetGCDRec(n,?m?%?n);
            }

            輾轉相除法,求一個數組中所有數的最大公約數

            int?GetGCD(int?*arr,?int?len)
            {
            ????
            int?iMax?=?arr[0],?iCurr,?iRemainder;

            ????
            for(int?i?=?1;?i?<?len;?i++)
            ????
            {
            ????????iCurr?
            =?arr[i];

            ????????
            if?(iMax?<?iCurr)
            ????????
            {
            ????????????iMax?
            ^=?iCurr;
            ????????????iCurr?
            ^=?iMax;
            ????????????iMax?
            ^=?iCurr;
            ????????}


            ????????iRemainder?
            =?iMax?%?iCurr;

            ????????
            while?(iRemainder)
            ????????
            {
            ????????????iMax?
            =?iCurr;
            ????????????iCurr?
            =?iRemainder;
            ????????????iRemainder?
            =?iMax?%?iCurr;
            ????????}

            ????????
            ????????iMax?
            =?iCurr;
            ????}
            //for

            ????
            return?iMax;

            }

            最小公倍數就是乘積除以最大公約數

            int?GetLCM(int?*arr,?int?len)
            {
            ????
            int?multiple?=?1;

            ????
            for?(int?i?=?0;?i?<?len;?i++)
            ????????multiple?
            *=?arr[i];

            ????
            return?multiple?/?GetGCD(arr,?len);
            }




            ?

            posted on 2006-12-04 09:54 Charles 閱讀(3512) 評論(1)  編輯 收藏 引用 所屬分類: 面試小算法

            FeedBack:
            # re: 求最大公約數與最小公倍數
            2007-12-07 20:38 | yysdsyl
            GetLCM求數組最小公倍數有誤,應改為如下:
            int GetLCM(int m,int n)
            {
            return m*n/GetGCD(m,n);
            }

            int GetNLCM(int *arr, int len)
            {
            if(len==1)
            return *arr;
            return GetLCM(arr[len-1],GetNLCM(arr,len-1));
            }  回復  更多評論
              
            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            決定開始寫工作日記,記錄一下自己的軌跡...

            常用鏈接

            留言簿(4)

            隨筆分類(70)

            隨筆檔案(71)

            charles推薦訪問

            搜索

            •  

            積分與排名

            • 積分 - 50507
            • 排名 - 449

            最新評論

            閱讀排行榜

            評論排行榜

            亚洲午夜久久久精品影院| 狠狠色丁香婷婷久久综合五月 | 国产精品青草久久久久福利99| 亚洲综合久久综合激情久久| 久久久久九九精品影院| 日产精品久久久一区二区| 久久综合九色综合精品| 国产精品久久久久久久app| 国产综合久久久久久鬼色| 欧美日韩中文字幕久久久不卡 | 久久91精品久久91综合| 亚洲狠狠久久综合一区77777| 久久青青色综合| 国产激情久久久久影院小草| 精品久久久无码人妻中文字幕| 国产精品免费久久久久久久久| 亚洲国产精品久久久天堂| 亚洲国产精品成人久久蜜臀 | 国产婷婷成人久久Av免费高清| 久久丝袜精品中文字幕| 青青国产成人久久91网| 久久精品人成免费| 无码超乳爆乳中文字幕久久| 一本大道久久东京热无码AV| 国产精品无码久久四虎| 亚洲国产精品久久66| 久久香蕉国产线看观看精品yw| 久久福利资源国产精品999| 久久久久国产| 丁香久久婷婷国产午夜视频| 亚洲嫩草影院久久精品| 日本久久久久久中文字幕| 亚洲欧美日韩久久精品第一区| 久久精品国产99久久久古代| 久久播电影网| 亚洲国产成人久久综合碰| 亚洲国产成人久久综合野外| 婷婷久久综合| 思思久久99热免费精品6| 色狠狠久久综合网| 亚洲精品无码久久千人斩|