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

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

歐幾里德算法
歐幾里德算法又稱輾轉(zhuǎn)相除法,用于計算兩個整數(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;
}

本質(zhì)上都是用的上面那個原理。

補充: 擴展歐幾里德算法是用來在已知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ù)的情況比比皆是,設計這樣的程序迫切希望能夠拋棄除法和取模。 (注:說到拋棄除法和取模,其實輾轉(zhuǎn)相除法可以寫成減法的形式)

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

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

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ù),算法結(jié)束
如果B=0,A是最大公約數(shù),算法結(jié)束
設置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++,轉(zhuǎ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 閱讀(5506) 評論(0)  編輯 收藏 引用 所屬分類: Algorithm
<2009年2月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
1234567

常用鏈接

留言簿(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>
            亚洲激情二区| 亚洲精品自在久久| 国产一区二区| 国产一区二区久久久| 国产亚洲一区二区在线观看 | 久久噜噜亚洲综合| 久久久综合视频| 美日韩精品免费| 欧美激情亚洲| 亚洲精品欧洲| 亚洲网站在线看| 欧美一区免费视频| 久久夜色精品国产| 欧美精品二区| 国产精品免费福利| 韩国av一区二区三区四区| 在线精品视频在线观看高清| 亚洲人成人77777线观看| 一区二区三区国产精品| 亚洲欧美另类在线观看| 久久午夜色播影院免费高清| 欧美激情成人在线| 一本色道久久综合亚洲二区三区 | 蜜臀99久久精品久久久久久软件| 欧美黑人国产人伦爽爽爽| 欧美先锋影音| 国产在线精品一区二区中文| 亚洲精品久久在线| 亚洲女性喷水在线观看一区| 久久亚洲午夜电影| 亚洲国产毛片完整版| 一本色道久久综合精品竹菊| 欧美一区二区性| 欧美大片一区二区| 国产精品嫩草久久久久| 在线观看亚洲a| 亚洲综合电影| 免费在线视频一区| 在线视频精品| 久久这里只有精品视频首页| 欧美性大战久久久久| 在线成人小视频| 亚洲视频久久| 欧美国产先锋| 欧美亚洲免费高清在线观看| 欧美激情第五页| 国产中文一区| 亚洲网友自拍| 欧美激情一区在线观看| 亚洲综合色网站| 欧美精品一区二区三区久久久竹菊 | 亚洲电影有码| 久久爱www.| 国产精品成人一区| 亚洲精品国产精品久久清纯直播| 欧美在线视频观看| 日韩一级大片| 免费的成人av| 狠狠色狠狠色综合日日91app| 亚洲一区二区三区精品动漫| 亚洲承认在线| 久久精品国产亚洲精品| 欧美午夜片在线观看| 亚洲精品视频免费| 麻豆久久婷婷| 欧美尤物巨大精品爽| 欧美午夜不卡| 一本色道久久综合亚洲精品不卡| 欧美 日韩 国产在线| 欧美伊人影院| 国产精品网站在线| 亚洲私拍自拍| 亚洲日本中文| 欧美成人国产一区二区| 亚洲电影在线观看| 久久亚洲春色中文字幕久久久| 亚洲在线成人| 欧美三级日韩三级国产三级| 99re6这里只有精品| 欧美高潮视频| 久久综合狠狠综合久久激情| 国产一区在线视频| 久久九九免费视频| 欧美一级片在线播放| 国产美女精品视频免费观看| 亚洲综合成人在线| 这里只有精品在线播放| 国产精品成人观看视频国产奇米| 夜夜嗨网站十八久久| 亚洲精品国产精品国自产观看浪潮 | 模特精品在线| 最新中文字幕亚洲| 欧美激情一区二区三区在线视频观看| 久久久久女教师免费一区| 黄色精品网站| 麻豆精品网站| 免费观看日韩av| 亚洲免费av电影| 亚洲精品中文字幕在线| 欧美日韩国产亚洲一区| 亚洲视频 欧洲视频| 在线一区二区日韩| 国产精品欧美在线| 久久成人资源| 久久久亚洲一区| 91久久精品一区二区别| 最新高清无码专区| 欧美日韩成人在线| 亚洲欧美日韩在线高清直播| 亚洲欧美日韩一区二区| 国内自拍一区| 欧美 日韩 国产精品免费观看| 免费日韩av| 一区二区三区国产盗摄| 亚洲永久免费av| 狠狠爱成人网| 亚洲国产一区二区三区a毛片| 欧美屁股在线| 欧美在线视频一区二区| 久久久国产一区二区| 亚洲日本一区二区三区| 一本久久综合亚洲鲁鲁五月天| 国产精品一区二区在线观看| 久久裸体艺术| 欧美精品二区| 亚洲欧美日韩在线综合| 久久精品国产久精国产思思| 亚洲日本在线观看| 在线一区二区三区四区| 黄色精品在线看| 亚洲人成在线观看一区二区| 国产精品羞羞答答xxdd| 免费在线国产精品| 欧美日韩国产成人在线91| 欧美一区二区三区免费观看视频 | 欧美高清在线一区二区| 亚洲在线观看视频| 久久岛国电影| 一区二区精品| 久久精品99久久香蕉国产色戒| 日韩午夜电影av| 欧美伊久线香蕉线新在线| 亚洲最新视频在线播放| 欧美一级网站| 在线一区二区日韩| 久久久国产91| 亚洲欧美日本视频在线观看| 久久一区二区三区av| 亚洲欧美日本视频在线观看| 久久综合久久综合这里只有精品| 亚洲一级在线观看| 久久偷窥视频| 香蕉久久精品日日躁夜夜躁| 牛人盗摄一区二区三区视频| 欧美综合二区| 欧美日韩18| 蜜臀久久99精品久久久画质超高清| 欧美体内she精视频| 欧美a级在线| 国产色爱av资源综合区| 99re6这里只有精品| 亚洲激情小视频| 欧美一级视频| 亚洲专区一二三| 欧美激情亚洲另类| 免费久久99精品国产自在现线| 国产精品久久久久久亚洲调教| 欧美国产三级| 精品av久久707| 欧美亚洲一级片| 亚洲永久免费av| 欧美激情久久久久| 能在线观看的日韩av| 国产亚洲综合在线| 亚洲天堂网在线观看| 日韩午夜高潮| 女人色偷偷aa久久天堂| 久热精品视频| 国产亚洲电影| 亚洲一区二区在线视频 | 亚洲精品一区在线观看| 亚洲国产高清高潮精品美女| 久久精品欧美日韩精品| 欧美中文在线观看国产| 国产精品视频免费在线观看| 亚洲免费黄色| 日韩视频二区| 欧美激情1区2区3区| 欧美激情四色 | 久久国产精品99精品国产| 国产精品久久中文| av不卡免费看| 亚洲在线一区二区| 欧美日韩亚洲系列| 亚洲毛片av| 在线视频一区二区| 欧美色播在线播放| 99在线精品观看| 亚洲综合清纯丝袜自拍| 国产精品久久久久久久免费软件|