• <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));
            }  回復  更多評論
              
            <2006年12月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

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

            常用鏈接

            留言簿(4)

            隨筆分類(70)

            隨筆檔案(71)

            charles推薦訪問

            搜索

            •  

            積分與排名

            • 積分 - 50433
            • 排名 - 449

            最新評論

            閱讀排行榜

            評論排行榜

            囯产极品美女高潮无套久久久| 久久青草国产精品一区| 欧美伊人久久大香线蕉综合| 亚洲欧美精品一区久久中文字幕| 99久久这里只精品国产免费| 久久发布国产伦子伦精品| 久久精品成人免费观看97| 亚洲午夜久久久影院伊人| 欧美亚洲国产精品久久蜜芽| 亚洲精品97久久中文字幕无码| 久久精品无码专区免费东京热 | 久久综合给合久久狠狠狠97色| 99久久久精品| 久久久久久久精品妇女99| 久久夜色tv网站| 久久精品人人做人人妻人人玩 | 午夜欧美精品久久久久久久 | 久久久女人与动物群交毛片| 亚洲国产精品无码久久98| 久久精品国产第一区二区| 久久国产色AV免费观看| 久久这里都是精品| 久久精品国产黑森林| 色综合久久久久综合体桃花网| 久久久久一本毛久久久| 青青草原综合久久| 久久婷婷国产麻豆91天堂| 久久中文骚妇内射| 久久久久久亚洲精品成人| 久久精品国产99国产精品导航| 日日狠狠久久偷偷色综合96蜜桃| 久久综合九色综合精品| 久久精品国产亚洲av高清漫画| 亚洲综合熟女久久久30p| 亚洲国产成人久久综合碰| 日日狠狠久久偷偷色综合免费| 91精品国产91久久| 美女久久久久久| 久久午夜福利无码1000合集| 久久人人爽人人爽人人片AV高清 | 香蕉99久久国产综合精品宅男自 |