• <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 - 66,  comments - 109,  trackbacks - 0

            歐幾里德算法

            歐幾里德算法又稱輾轉(zhuǎn)相除法,用于計(jì)算兩個(gè)整數(shù)a,b的最大公約數(shù)。其計(jì)算原理依賴于下面的定理:

            定理:gcd(a,b) = gcd(b,a mod b)

             證明:a可以表示成a = kb + r,則r = a mod b
            假設(shè)d是a,b的一個(gè)公約數(shù),則有
            d|a, d|b,而r = a - kb,因此d|r
            因此d是(b,a mod b)的公約數(shù)
            假設(shè)d 是(b,a mod b)的公約數(shù),則
            d | b , d |r ,但是a = kb +r
            因此d也是(a,b)的公約數(shù)
            因此(a,b)和(b,a mod b)的公約數(shù)是一樣的,其最大公約數(shù)也必然相等,得證
            

            歐幾里德算法就是根據(jù)這個(gè)原理來(lái)做的,其算法用C++語(yǔ)言描述為:

                void swap(int & a, int & b)
                {
                    int c = a;
                    a = b;
                    b = c;
                }
                int gcd(int a,int b)
                {
                    if(0 == a )
                    {
                        return b;
                    }
                    if( 0 == b)
                    {
                        return a;
                    }
                    if(a > b)
                    {
                        swap(a,b);
                    }
                    int c;
                    for(c = a % b ; c > 0  ; c = a % b)
                    {
                        a = b;
                        b = c;
                    }
                    return b;
                }
            

            模P乘法逆元

            對(duì)于整數(shù)a、p,如果存在整數(shù)b,滿足ab mod p =1,則說(shuō),b是a的模p乘法逆元。

            定理:a存在模p的乘法逆元的充要條件是gcd(a,p) = 1

             證明:
            首先證明充分性
            如果gcd(a,p) = 1,根據(jù)歐拉定理,aφ(p) ≡ 1 mod p,因此
            顯然aφ(p)-1 mod p是a的模p乘法逆元。
            再證明必要性
            假設(shè)存在a模p的乘法逆元為b
            ab ≡ 1 mod p
            則ab = kp +1    ,所以1 = ab - kp
            因?yàn)間cd(a,p) = d
            所以d | 1
            所以d只能為1
            

            擴(kuò)展歐幾里德算法

            擴(kuò)展歐幾里德算法不但能計(jì)算(a,b)的最大公約數(shù),而且能計(jì)算a模b及b模a的乘法逆元,用C語(yǔ)言描述如下:

             int    gcd(int    a,    int    b    ,    int&    ar,int    &    br)
            {
            int    x1,x2,x3;
            int    y1,y2,y3;
            int    t1,t2,t3;
            if(0    ==    a)
            {//有一個(gè)數(shù)為0,就不存在乘法逆元
                         ar    =    0;
                         br    =    0    ;
                         return    b;
            }
            if(0    ==    b)
            {
                         ar    =    0;
                         br    =    0    ;
                         return    a;
            }
            x1    =    1;
            x2    =    0;
            x3    =    a;
            y1    =    0;
            y2    =    1;
            y3    =    b;
            int    k;
            for(    t3    =    x3    %    y3    ;    t3    !=    0    ;        t3    =    x3    %    y3)
            {
            k    =    x3    /    y3;
            t2    =    x2    -    k    *    y2;
            t1    =    x1    -    k    *    y1;
            x1    =    y1;
            x1    =    y2;
            x3    =    y3;
            y1    =    t1;
            y2    =    t2;
            y3    =    t3;
            }
            if(    y3    ==    1)
            {
            //有乘法逆元
            ar    =    y2;
            br    =    x1;
            return    1;
            }else{
                    //公約數(shù)不為1,無(wú)乘法逆元
                     ar    =    0;
                     br    =    0;
                     return    y3;
            }
            }
            

            擴(kuò)展歐幾里德算法對(duì)于最大公約數(shù)的計(jì)算和普通歐幾里德算法是一致的。計(jì)算乘法逆元?jiǎng)t顯得很難明白。我想了半個(gè)小時(shí)才想出證明他的方法。

            首先重復(fù)拙作整除中的一個(gè)論斷:

            如果gcd(a,b)=d,則存在m,n,使得d = ma + nb,稱呼這種關(guān)系為a、b組合整數(shù)d,m,n稱為組合系數(shù)。當(dāng)d=1時(shí),有 ma + nb = 1 ,此時(shí)可以看出m是a模b的乘法逆元,n是b模a的乘法逆元。

            為了證明上面的結(jié)論,我們把上述計(jì)算中xi、yi看成ti的迭代初始值,考察一組數(shù)(t1,t2,t3),用歸納法證明:當(dāng)通過(guò)擴(kuò)展歐幾里德算法計(jì)算后,每一行都滿足a×t1 + b×t2 = t3

             第一行:1 × a + 0 × b = a成立
            第二行:0 × a + 1 × b = b成立
            假設(shè)前k行都成立,考察第k+1行
            對(duì)于k-1行和k行有
            t1(k-1)    t2(k-1)  t3(k-1)
            t1(k)      t2(k)    t3(k)
            分別滿足:
            t1(k-1) × a + t2(k-1) × b = t3(k-1)
            t1(k)   × a + t2(k)   × b = t3(k)
            根據(jù)擴(kuò)展歐幾里德算法,假設(shè)t3(k-1) = j t3(k) + r
            則:
            t3(k+1) = r
            t2(k+1) = t2(k-1) - j × t2(k)
            t1(k+1) = t1(k-1) - j × t1(k)
            則
            t1(k+1) × a + t2(k+1) × b
            =t1(k-1) × a - j × t1(k) × a +
            t2(k-1) × b - j × t2(k) × b
            = t3(k-1) - j t3(k) = r
            = t3(k+1)
            得證
            

            因此,當(dāng)最終t3迭代計(jì)算到1時(shí),有t1× a + t2 × b = 1,顯然,t1是a模b的乘法逆元,t2是b模a的乘法逆元。

            posted on 2008-03-19 00:17 zoyi 閱讀(4313) 評(píng)論(1)  編輯 收藏 引用

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            歡迎光臨 我的白菜菜園

            <2025年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            常用鏈接

            留言簿(8)

            隨筆分類

            隨筆檔案

            文章檔案

            相冊(cè)

            acmer

            online judge

            隊(duì)友

            技術(shù)

            朋友

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            久久国产亚洲精品无码| 99久久精品国产综合一区| 精品久久久久久国产三级| 伊人久久大香线蕉影院95| 久久精品国产亚洲综合色| 久久狠狠一本精品综合网| 77777亚洲午夜久久多喷| 久久久一本精品99久久精品88| 99久久婷婷免费国产综合精品| 久久av无码专区亚洲av桃花岛| 青青草原综合久久| 深夜久久AAAAA级毛片免费看| 久久SE精品一区二区| 青青青青久久精品国产| 精品熟女少妇AV免费久久| 国产成人99久久亚洲综合精品| 久久人人爽人人爽人人片AV高清 | 久久r热这里有精品视频| 久久婷婷午色综合夜啪| 精品国产婷婷久久久| 国产精品久久久久久福利漫画| 区亚洲欧美一级久久精品亚洲精品成人网久久久久 | 久久香蕉超碰97国产精品| 久久午夜综合久久| 久久久久波多野结衣高潮| 久久男人AV资源网站| 久久久久高潮综合影院| av色综合久久天堂av色综合在| 欧美精品福利视频一区二区三区久久久精品| 久久无码AV中文出轨人妻| 一本色道久久综合狠狠躁| 精品免费久久久久久久| 日本三级久久网| 久久婷婷是五月综合色狠狠| 久久精品免费一区二区| 久久国产精品免费一区| 久久久久久综合网天天| 国产AⅤ精品一区二区三区久久| 日日狠狠久久偷偷色综合0| 亚洲AV成人无码久久精品老人| 好属妞这里只有精品久久|