青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

posts - 297,  comments - 15,  trackbacks - 0
轉自:::::http://blog.chinaunix.net/u2/76292/showart_1418158.html
1. 歐幾里德算法和擴展歐幾里德算法

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

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

證明:a可以表示成a = kb + r,則r = a mod b
假設d是a,b的一個公約數(shù),則有
d|a, d|b,而r = a - kb,因此d|r
因此d是(b,a mod b)的公約數(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ù)這個原理來做的,其算法用C++語言描述為:

int Gcd(int a, int b)
{
    
if(b == 0)
        
return a;
    
return Gcd(b, a % b);
}

當然你也可以寫成迭代形式:
int Gcd(int a, int b)
{
    
while(b != 0)
    
{
        
int r = b;
        b 
= a % b;
        a 
= r;
    }

    
return a;
}

本質上都是用的上面那個原理。

補充: 擴展歐幾里德算法是用來在已知a, b求解一組p,q使得p * a+q  * b = Gcd(a, b)  (解一定存在,根據(jù)數(shù)論中的相關定理)。擴展歐幾里德常用在求解模線性方程及方程組中。下面是一個使用C++的實現(xiàn):
int exGcd(int a, int b, int &x, int &y)
{
    
if(b == 0)
    
{
        x 
= 1;
        y 
= 0;
        
return a;
    }

    
int r = exGcd(b, a % b, x, y);
    
int t = x;
    x 
= y;
    y 
= t - a / b * y;

    
return r;
}

把這個實現(xiàn)和Gcd的遞歸實現(xiàn)相比,發(fā)現(xiàn)多了下面的x,y賦值過程,這就是擴展歐幾里德算法的精髓。
可以這樣思考:
對于a' = b, b' = a % b 而言,我們求得 x, y使得 a'x + b'y = Gcd(a', b')
由于b' = a % b = a - a / b * b (注:這里的/是程序設計語言中的除法)
那么可以得到:
a'x + b'y = Gcd(a', b')  ===>
bx + (a - a / b * b)y = Gcd(a', b') = Gcd(a, b)  ===>
ay +b(x - a / b*y) = Gcd(a, b)
因此對于a和b而言,他們的相對應的p,q分別是 y和(x-a/b*y)

2. Stein算法
歐幾里德算法是計算兩個數(shù)最大公約數(shù)的傳統(tǒng)算法,他無論從理論還是從效率上都是很好的。但是他有一個致命的缺陷,這個缺陷只有在大素數(shù)時才會顯現(xiàn)出來。

考慮現(xiàn)在的硬件平臺,一般整數(shù)最多也就是64位,對于這樣的整數(shù),計算兩個數(shù)之間的模是很簡單的。對于字長為32位的平臺,計算兩個不超過32位的整數(shù)的模,只需要一個指令周期,而計算64位以下的整數(shù)模,也不過幾個周期而已。但是對于更大的素數(shù),這樣的計算過程就不得不由用戶來設計,為了計算兩個超過 64位的整數(shù)的模,用戶也許不得不采用類似于多位數(shù)除法手算過程中的試商法,這個過程不但復雜,而且消耗了很多CPU時間。對于現(xiàn)代密碼算法,要求計算 128位以上的素數(shù)的情況比比皆是,設計這樣的程序迫切希望能夠拋棄除法和取模。 (注:說到拋棄除法和取模,其實輾轉相除法可以寫成減法的形式)

Stein算法由J. Stein 1961年提出,這個方法也是計算兩個數(shù)的最大公約數(shù)。和歐幾里德算法 算法不同的是,Stein算法只有整數(shù)的移位和加減法,這對于程序設計者是一個福音。

為了說明Stein算法的正確性,首先必須注意到以下結論:

gcd(a,a) = a,也就是一個數(shù)和他自身的公約數(shù)是其自身
gcd(ka,kb) = k gcd(a,b),也就是最大公約數(shù)運算和倍乘運算可以交換,特殊的,當k=2時,說明兩個偶數(shù)的最大公約數(shù)必然能被2整除。

有了上述規(guī)律就可以給出Stein算法如下:

如果A=0,B是最大公約數(shù),算法結束
如果B=0,A是最大公約數(shù),算法結束
設置A1 = A、B1=B和C1 = 1
如果An和Bn都是偶數(shù),則An+1 =An /2,Bn+1 =Bn /2,Cn+1 =Cn *2(注意,乘2只要把整數(shù)左移一位即可,除2只要把整數(shù)右移一位即可)
如果An是偶數(shù),Bn不是偶數(shù),則An+1 =An /2,Bn+1 =Bn ,Cn+1 =Cn (很顯然啦,2不是奇數(shù)的約數(shù))
如果Bn是偶數(shù),An不是偶數(shù),則Bn+1 =Bn /2,An+1 =An ,Cn+1 =Cn (很顯然啦,2不是奇數(shù)的約數(shù))
如果An和Bn都不是偶數(shù),則An+1 =|An -Bn|,Bn+1 =min(An,Bn),Cn+1 =Cn
n++,轉4
這個算法的原理很顯然,所以就不再證明了。現(xiàn)在考察一下該算法和歐幾里德方法效率上的差別。

給出一個C++的實現(xiàn):

int Gcd(int a, int b)
{
    
if(a == 0return b;
    
if(b == 0return a;
    
if(a % 2 == 0 && b % 2 == 0return 2 * gcd(a >> 1, b >> 1);
    
else if(a % 2 == 0)  return gcd(a >> 1, b);
    
else if(b % 2 == 0return gcd(a, b >> 1);
    
else return gcd(abs(a - b), Min(a, b));
}

考慮歐幾里德算法,最惡劣的情況是,每次迭代a = 2b -1,這樣,迭代后,r= b-1。如果a小于2N,這樣大約需要 4N次迭代。而考慮Stein算法,每次迭代后,顯然AN+1BN+1≤ ANBN/2,最大迭代次數(shù)也不超過4N次。也就是說,迭代次數(shù)幾乎是相等的。但是,需要注意的是,對于大素數(shù),試商法將使每次迭代都更復雜,因此對于大素數(shù)Stein將更有優(yōu)勢

練習:
OJ上面的赤裸裸的Gcd算法的題不多,大多都是套了一個外殼。
找了兩道,可以試試看
HDOJ 2028 Lowest Common Multiple Plus   這個是求n個數(shù)的最小公倍數(shù)(有了最大公約數(shù),最小公倍數(shù)應該很容易了)
ZJU 2678 Bishops on a Toral Board  這個題目要發(fā)現(xiàn)規(guī)律,不錯的題目很老的東東了,其實也沒啥好整理的,網(wǎng)上很多資料了,就當備用把:-)
posted on 2009-05-31 19:09 chatler 閱讀(5504) 評論(0)  編輯 收藏 引用 所屬分類: Algorithm
<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

常用鏈接

留言簿(10)

隨筆分類(307)

隨筆檔案(297)

algorithm

Books_Free_Online

C++

database

Linux

Linux shell

linux socket

misce

  • cloudward
  • 感覺這個博客還是不錯,雖然做的東西和我不大相關,覺得看看還是有好處的

network

OSS

  • Google Android
  • Android is a software stack for mobile devices that includes an operating system, middleware and key applications. This early look at the Android SDK provides the tools and APIs necessary to begin developing applications on the Android platform using the Java programming language.
  • os161 file list

overall

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            91久久精品国产91久久| 久久精品国产第一区二区三区最新章节| 国产精品美女在线| 蜜臀va亚洲va欧美va天堂 | 国产视频精品网| 欧美黄色日本| 欧美r片在线| 欧美日韩在线播| 国产精品国产三级国产aⅴ9色| 欧美日韩高清区| 欧美日韩第一区| 国产日韩欧美精品综合| 国内精品久久久久伊人av| 亚洲第一页自拍| 亚洲欧美一级二级三级| 欧美在线观看日本一区| 久久午夜羞羞影院免费观看| 欧美高清你懂得| 国产精品www.| 亚洲第一福利视频| 欧美一区国产在线| 欧美激情一区二区三区蜜桃视频 | 亚洲一区二区三区免费视频| 亚洲日本视频| 久久久999精品免费| 亚洲三级毛片| 久久久午夜电影| 国产一区二区三区高清播放| 亚洲精品国产品国语在线app | 欧美精品系列| 国产亚洲欧洲一区高清在线观看 | 欧美激情国产日韩| 国产日韩视频| 亚洲在线观看免费| 日韩视频在线免费观看| 欧美mv日韩mv国产网站app| 国内在线观看一区二区三区| 亚洲综合视频一区| 亚洲天堂偷拍| 国产色综合久久| 欧美在线一级视频| 久久精品一区二区| 好看的日韩av电影| 欧美黄色小视频| 欧美日韩国产高清| 亚洲一区二区三区在线视频| 99re热这里只有精品视频| 欧美日韩国产黄| 小嫩嫩精品导航| 欧美中文字幕在线播放| 亚洲国产婷婷香蕉久久久久久99 | 亚洲欧美一区二区三区在线| 国产精品一区二区女厕厕| 久久九九免费| 欧美日韩视频在线一区二区 | 国产一级一区二区| 美女网站在线免费欧美精品| 免费国产自线拍一欧美视频| 亚洲午夜在线观看视频在线| 午夜视频久久久| 日韩视频中文字幕| 老司机一区二区三区| 欧美肥婆bbw| 亚洲免费伊人电影在线观看av| 国产毛片久久| 蜜臀久久久99精品久久久久久| 日韩小视频在线观看| 久久精品视频在线| 一本色道久久综合亚洲精品婷婷 | 亚洲久久一区二区| 欧美新色视频| 欧美久久婷婷综合色| 小处雏高清一区二区三区| 亚洲电影av| 一区二区三区精品视频| 欧美成人一区二区三区片免费 | 国产欧美日韩麻豆91| 欧美在线播放高清精品| 欧美电影免费观看| 亚洲无限乱码一二三四麻| 国产欧美日韩综合一区在线播放| 久久久91精品国产| 亚洲精品国产精品乱码不99 | 欧美成人一区二免费视频软件| 国产亚洲一区精品| 欧美久色视频| 久久久久国产一区二区三区四区| 亚洲国产精品久久人人爱蜜臀| 亚洲视屏一区| 亚洲激情女人| 国产有码在线一区二区视频| 欧美精品一区在线| 久久久久久日产精品| 亚洲综合精品| 亚洲欧美日韩精品在线| 日韩一级免费| 亚洲人成网站精品片在线观看 | 一区二区三区中文在线观看 | 国产亚洲一区二区三区在线播放| 欧美日韩成人网| 免费在线观看精品| 免费欧美高清视频| 久久综合九色综合久99| 欧美一级久久久| 亚洲一区二区视频在线观看| 亚洲色图综合久久| 亚洲无限av看| 午夜视频一区| 午夜精彩国产免费不卡不顿大片| 亚洲第一色在线| 亚洲免费成人av| 日韩一级精品| 久久久久女教师免费一区| 久久久99精品免费观看不卡| 久久亚洲一区二区| 欧美激情视频一区二区三区免费| 欧美日韩国产综合在线| 欧美日韩精品高清| 激情欧美亚洲| 久久精品国产成人| 久久婷婷一区| 欧美日韩国产影院| 国产自产女人91一区在线观看| 在线观看成人网| 亚洲视频综合| 亚洲高清在线视频| 午夜精品一区二区三区电影天堂| 美女精品在线| 国产日韩一区在线| 亚洲综合国产精品| 亚洲国产日日夜夜| 久久亚洲高清| 国内精品久久久久久久影视蜜臀 | 欧美片在线观看| 国产美女精品视频免费观看| 亚洲人午夜精品| 欧美成人嫩草网站| 欧美在线观看一区| 国产精品一区二区在线观看不卡 | 亚洲电影在线免费观看| 亚洲在线中文字幕| 欧美三级不卡| 在线亚洲免费| 一级日韩一区在线观看| 欧美日韩四区| 艳妇臀荡乳欲伦亚洲一区| 欧美激情在线| 欧美日韩精品免费看| 一本久久a久久免费精品不卡| 欧美韩日一区二区三区| 美女性感视频久久久| 亚洲二区三区四区| 欧美国产一区二区在线观看| 欧美亚洲一区二区在线| 欧美成人性网| 国产精品成人一区二区网站软件 | 麻豆久久婷婷| 国产精品sss| 亚洲欧美日韩天堂| 亚洲精品影视| 亚洲精品在线观| 91久久精品国产91久久性色| 久久嫩草精品久久久精品一| 一区二区三区日韩欧美精品| 亚洲自拍偷拍网址| 亚洲欧美日本日韩| 久久天天躁狠狠躁夜夜av| 久久久久国色av免费看影院| 亚洲天堂偷拍| 国产一区二区三区的电影| 亚洲第一网站| 欧美在线首页| 久久久久久91香蕉国产| 欧美午夜精品久久久久免费视| 免费欧美日韩| 亚洲国产精品久久久久| 久久夜色撩人精品| 久久久久免费观看| 国产一区二区三区四区hd| 亚洲私人黄色宅男| 久久久www成人免费无遮挡大片| 国产亚洲精品福利| 日韩小视频在线观看专区| 欧美理论在线| 欧美成熟视频| 国产深夜精品| 国内自拍一区| 亚洲欧美区自拍先锋| 久久综合一区| 亚洲一区二区欧美| 黄色亚洲在线| 欧美日韩一级黄| 欧美专区在线观看| 国产日韩欧美一区在线| 欧美自拍偷拍午夜视频| 亚洲精品男同| 久久久亚洲成人| 小黄鸭精品密入口导航| 亚洲精品久久在线| 国内揄拍国内精品久久|