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

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
假設(shè)d是a,b的一個公約數(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ù)這個原理來做的,其算法用C++語言描述為:

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

當(dāng)然你也可以寫成迭代形式:
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ù)論中的相關(guān)定理)。擴展歐幾里德常用在求解模線性方程及方程組中。下面是一個使用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 (注:這里的/是程序設(shè)計語言中的除法)
那么可以得到:
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而言,他們的相對應(yīng)的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ù),這樣的計算過程就不得不由用戶來設(shè)計,為了計算兩個超過 64位的整數(shù)的模,用戶也許不得不采用類似于多位數(shù)除法手算過程中的試商法,這個過程不但復(fù)雜,而且消耗了很多CPU時間。對于現(xiàn)代密碼算法,要求計算 128位以上的素數(shù)的情況比比皆是,設(shè)計這樣的程序迫切希望能夠拋棄除法和取模。 (注:說到拋棄除法和取模,其實輾轉(zhuǎn)相除法可以寫成減法的形式)

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

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

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

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

如果A=0,B是最大公約數(shù),算法結(jié)束
如果B=0,A是最大公約數(shù),算法結(jié)束
設(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++,轉(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ù),試商法將使每次迭代都更復(fù)雜,因此對于大素數(shù)Stein將更有優(yōu)勢

練習(xí):
OJ上面的赤裸裸的Gcd算法的題不多,大多都是套了一個外殼。
找了兩道,可以試試看
HDOJ 2028 Lowest Common Multiple Plus   這個是求n個數(shù)的最小公倍數(shù)(有了最大公約數(shù),最小公倍數(shù)應(yīng)該很容易了)
ZJU 2678 Bishops on a Toral Board  這個題目要發(fā)現(xiàn)規(guī)律,不錯的題目很老的東東了,其實也沒啥好整理的,網(wǎng)上很多資料了,就當(dāng)備用把:-)
posted on 2009-05-31 19:09 chatler 閱讀(5506) 評論(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
  • 感覺這個博客還是不錯,雖然做的東西和我不大相關(guān),覺得看看還是有好處的

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>
            亚洲亚洲精品三区日韩精品在线视频 | 麻豆精品视频在线观看| 久久免费视频在线观看| 在线欧美三区| 欧美精品1区| 亚洲视频一区| 国产欧美日韩一区| 久久精品麻豆| 亚洲国产天堂久久综合网| 亚洲精品视频在线播放| 欧美日韩综合网| 欧美在线观看一区二区| 亚洲成色999久久网站| 国产一区高清视频| 女同一区二区| 午夜国产精品影院在线观看| 免费av成人在线| 99re6这里只有精品| 国产精品一区免费在线观看| 久久一区精品| 亚洲视屏一区| 欧美国产精品劲爆| 亚洲欧美视频在线观看视频| 在线播放不卡| 国产精品成人免费精品自在线观看| 欧美在线免费观看亚洲| 亚洲激情视频在线观看| 欧美一区二区三区四区在线观看| 亚洲第一页自拍| 国产精品免费观看在线| 免费国产一区二区| 亚洲欧美一级二级三级| 亚洲欧洲精品成人久久奇米网 | 国产在线欧美日韩| 欧美日韩免费观看一区=区三区| 性做久久久久久久免费看| 亚洲人成亚洲人成在线观看| 久久久久成人网| 亚洲嫩草精品久久| 亚洲精品一区二区网址| 尤物yw午夜国产精品视频明星| 欧美日韩日本国产亚洲在线| 另类亚洲自拍| 久久精品国产久精国产一老狼| 一区二区av在线| 亚洲国产视频一区| 欧美不卡一卡二卡免费版| 欧美一区三区二区在线观看| 亚洲天堂av综合网| 亚洲每日在线| 亚洲精品影院| 亚洲经典三级| 亚洲国产激情| 激情国产一区| 韩国一区电影| 国产一区欧美| 国产日韩欧美高清免费| 国产精品免费网站在线观看| 欧美日韩中文字幕综合视频| 欧美精品一区在线播放| 亚洲午夜精品网| 在线亚洲一区观看| 99re6热在线精品视频播放速度| 亚洲国产精品www| 欧美激情91| 亚洲福利免费| 亚洲国产精品久久人人爱蜜臀| 免费观看日韩| 欧美激情无毛| 亚洲第一搞黄网站| 亚洲全部视频| 日韩一二三在线视频播| 99精品久久久| 亚洲一级黄色av| 亚洲在线黄色| 亚洲欧美国产77777| 校园激情久久| 久久久午夜精品| 欧美高清一区二区| 欧美日韩一区二区三区四区在线观看 | 亚洲国产精品电影在线观看| 亚洲激精日韩激精欧美精品| 最新国产成人av网站网址麻豆 | 乱中年女人伦av一区二区| 久久久精品一区| 久久综合色影院| 亚洲第一精品夜夜躁人人爽| 亚洲精品视频免费观看| 一本色道久久综合狠狠躁篇的优点 | 最新中文字幕一区二区三区| 亚洲精品美女91| 亚洲线精品一区二区三区八戒| 性久久久久久久久久久久| 久久久91精品国产一区二区三区| 男男成人高潮片免费网站| 亚洲国产精品久久精品怡红院| 日韩一级精品视频在线观看| 亚洲一区二区在| 久久久伊人欧美| 欧美日韩成人| 国产日产高清欧美一区二区三区| 在线观看一区视频| 亚洲午夜黄色| 久久亚洲精品一区二区| 亚洲国产天堂久久综合网| 亚洲一区二区少妇| 免费观看在线综合色| 欧美亚洲第一页| 欧美成人国产| 国产精品欧美精品| 亚洲激情电影中文字幕| 亚洲欧美www| 欧美mv日韩mv国产网站| 中文精品一区二区三区| 老妇喷水一区二区三区| 国产精品美女www爽爽爽| 亚洲高清在线精品| 欧美亚洲一区| 亚洲精品美女在线观看播放| 性色av一区二区三区| 欧美人妖在线观看| 在线色欧美三级视频| 午夜激情久久久| 亚洲精品久久久久中文字幕欢迎你| 亚洲欧美日韩在线不卡| 欧美日韩亚洲综合| 亚洲成色最大综合在线| 欧美一区激情视频在线观看| 亚洲精品美女在线观看| 久久久噜噜噜久久人人看| 国产九九精品| 国产精品99久久久久久久vr| 亚洲第一成人在线| 久久久精彩视频| 国产欧美日韩精品专区| 亚洲午夜免费福利视频| 欧美激情中文字幕一区二区| 久久国产精品毛片| 国产模特精品视频久久久久 | 性18欧美另类| 99re视频这里只有精品| 欧美国产日韩一区| 亚洲国产91| 欧美va亚洲va香蕉在线| 欧美在线视频观看| 国产午夜精品在线| 午夜电影亚洲| 亚洲一区影院| 国产精品久久久久久久久借妻 | 欧美日韩精品高清| 亚洲日本中文字幕| 欧美激情一二区| 久久综合电影| 亚洲高清影视| 欧美激情精品久久久久久黑人| 久久久国产成人精品| 狠狠色狠狠色综合人人| 久久久久国产免费免费| 欧美在线精品一区| 国模吧视频一区| 麻豆免费精品视频| 久久深夜福利| 亚洲国产欧美一区二区三区久久 | 欧美国产日韩在线观看| 狂野欧美一区| 日韩视频一区二区三区在线播放免费观看 | 亚洲国产岛国毛片在线| 欧美二区在线观看| 欧美成人福利视频| 99在线精品观看| 9久草视频在线视频精品| 国产精品海角社区在线观看| 午夜在线观看欧美| 欧美亚洲自偷自偷| 精品二区视频| 欧美黄色一区二区| 欧美日韩精品系列| 小黄鸭视频精品导航| 欧美中文字幕视频| 亚洲国产精品精华液2区45| 亚洲高清中文字幕| 国产精品av免费在线观看| 小嫩嫩精品导航| 久久久久久亚洲精品杨幂换脸| 亚洲激情在线| 一区二区91| 国产一区二区三区日韩| 欧美激情视频给我| 国产精品av一区二区| 久久精品一区二区国产| 男女精品视频| 午夜精品久久久久影视| 久久久91精品国产一区二区精品| 亚洲经典视频在线观看| 亚洲视频电影图片偷拍一区| 狠狠色狠狠色综合人人| 亚洲三级网站| 国内精品久久久久久| 亚洲欧洲一区| 国产亚洲免费的视频看|