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

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

歐幾里德算法
歐幾里德算法又稱輾轉(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ì)上都是用的上面那個原理。

補(bǔ)充: 擴(kuò)展歐幾里德算法是用來在已知a, b求解一組p,q使得p * a+q  * b = Gcd(a, b)  (解一定存在,根據(jù)數(shù)論中的相關(guān)定理)。擴(kuò)展歐幾里德常用在求解模線性方程及方程組中。下面是一個使用C++的實(shí)現(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;
}

把這個實(shí)現(xiàn)和Gcd的遞歸實(shí)現(xiàn)相比,發(fā)現(xiàn)多了下面的x,y賦值過程,這就是擴(kuò)展歐幾里德算法的精髓。
可以這樣思考:
對于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è)計這樣的程序迫切希望能夠拋棄除法和取模。 (注:說到拋棄除法和取模,其實(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ù)運(yùn)算和倍乘運(yùn)算可以交換,特殊的,當(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++的實(shí)現(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ī)律,不錯的題目很老的東東了,其實(shí)也沒啥好整理的,網(wǎng)上很多資料了,就當(dāng)備用把:-)
posted on 2009-05-31 19:09 chatler 閱讀(5500) 評論(0)  編輯 收藏 引用 所屬分類: Algorithm
<2009年12月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

常用鏈接

留言簿(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>
            国内精品免费在线观看| 久久久激情视频| 国产精品免费看片| 欧美日韩视频免费播放| 欧美噜噜久久久xxx| 免费看亚洲片| 欧美另类一区| 国产精品美女久久久久久2018| 欧美丝袜一区二区| 国产精品伦理| 国内自拍视频一区二区三区| 激情久久婷婷| 日韩一级在线观看| 午夜视频在线观看一区| 久久久久久穴| 欧美黑人在线播放| 一区二区三区导航| 午夜伦理片一区| 久久综合九色综合网站| 欧美日韩精品二区第二页| 国产毛片精品视频| 最近中文字幕mv在线一区二区三区四区 | 免播放器亚洲一区| 午夜精品久久久| 欧美日韩视频一区二区三区| 欧美午夜不卡在线观看免费 | 亚洲网站视频| 久久精品电影| 亚洲美女一区| 久久久久国产精品麻豆ai换脸| 欧美巨乳波霸| 亚洲第一主播视频| 亚洲欧美激情视频| 亚洲国产你懂的| 欧美高清视频一区二区| 亚洲免费视频观看| 欧美日韩国产在线播放| 亚洲国产91| 久久久国产精彩视频美女艺术照福利 | 性欧美xxxx大乳国产app| 亚洲第一狼人社区| 久久久99久久精品女同性| 国产精品素人视频| 亚洲深夜影院| 亚洲国产欧美一区| 久久躁狠狠躁夜夜爽| 国产私拍一区| 亚洲欧美电影在线观看| 99精品视频免费观看视频| 欧美二区在线观看| 亚洲看片网站| 亚洲国产视频一区二区| 免费成人激情视频| 亚洲国产激情| 亚洲国产精品精华液网站| 久久久精品国产一区二区三区 | 欧美日韩国产天堂| 亚洲日本久久| 亚洲黄色av一区| 欧美国产第一页| 亚洲精品美女免费| 亚洲国产综合在线| 欧美激情第3页| 9l视频自拍蝌蚪9l视频成人| 亚洲国产欧美不卡在线观看| 欧美国产精品专区| 亚洲视频在线二区| 亚洲午夜电影在线观看| 国产欧美日韩亚州综合| 久久精品91| 欧美一区亚洲| 亚洲国产精品va在线看黑人| 亚洲电影免费观看高清完整版在线 | 欧美在线视频播放| 亚洲免费影视第一页| 国产精品久久| 午夜精品福利在线| 性做久久久久久免费观看欧美| 国产日韩视频| 久久永久免费| 欧美大片在线看| 中文av字幕一区| 亚洲少妇在线| 影音先锋久久久| 亚洲人成网站在线观看播放| 欧美视频日韩视频在线观看| 久久精品99国产精品日本| 久久午夜羞羞影院免费观看| 亚洲视频一二三| 久久久九九九九| 一本久久青青| 欧美在线视频免费播放| 亚洲精品1区| 亚洲自拍啪啪| 亚洲人成在线观看一区二区| 中文精品一区二区三区| 在线精品观看| 亚洲午夜激情| 亚洲高清视频中文字幕| 一区二区日韩| 亚洲激情婷婷| 午夜一区二区三区在线观看| 亚洲精品一区二区三区樱花| 欧美亚洲三区| 亚洲午夜91| 免费视频一区二区三区在线观看| 午夜视频一区二区| 欧美精品一区二区三| 久久蜜桃香蕉精品一区二区三区| 欧美日韩八区| 欧美大色视频| 国产自产精品| 亚洲午夜成aⅴ人片| 日韩一区二区精品| 欧美1区视频| 久久中文字幕一区二区三区| 国产精品青草久久| 夜夜嗨网站十八久久| 亚洲激情中文1区| 久久久久免费| 久久五月天婷婷| 国产美女高潮久久白浆| 欧美乱在线观看| 欧美福利一区| 激情视频一区二区三区| 亚洲无人区一区| 亚洲图片在区色| 欧美激情亚洲国产| 亚洲第一黄色| 亚洲激情在线观看| 久久免费黄色| 久久视频在线免费观看| 国产原创一区二区| 西西裸体人体做爰大胆久久久| 亚洲一区日韩| 国产精品v一区二区三区| 亚洲精品国产精品国自产观看浪潮 | 亚洲欧洲日产国产网站| 黄色精品一区| 久久福利毛片| 久久久国产视频91| 狠狠爱成人网| 久久九九精品99国产精品| 国内精品久久久久久影视8| 亚洲午夜性刺激影院| 亚洲一区三区电影在线观看| 欧美日韩国产专区| 一区二区三区四区五区在线| 亚洲午夜精品一区二区三区他趣| 欧美日本簧片| 中文一区二区| 久久精品国产免费看久久精品| 国产一区二区日韩| 久久视频在线免费观看| 亚洲高清免费| 亚洲一区欧美一区| 黄色一区二区三区四区| 免费欧美高清视频| 9色精品在线| 久久久精品日韩| 亚洲欧洲一区二区三区在线观看| 欧美国产精品| 亚洲欧美日韩中文播放| 麻豆精品传媒视频| 亚洲最新视频在线播放| 国产精品久久久久久久久果冻传媒| 亚洲一区亚洲| 欧美一区二区三区的| 18成人免费观看视频| 欧美女同视频| 午夜伦理片一区| 亚洲国产高潮在线观看| 亚洲综合日韩在线| 一区二区亚洲| 欧美日韩美女在线观看| 亚洲欧美综合国产精品一区| 女生裸体视频一区二区三区| 夜夜嗨av一区二区三区中文字幕 | 欧美 日韩 国产一区二区在线视频 | 国产午夜亚洲精品羞羞网站| 久久久久久网址| 亚洲精品免费看| 久久成人在线| 日韩视频一区二区在线观看 | 在线亚洲精品| 国产综合视频| 国产精品乱子乱xxxx| 欧美xart系列高清| 欧美一级黄色录像| 亚洲精品美女免费| 亚洲精品一区中文| 亚洲国产精选| 久久久精品免费视频| 亚洲资源在线观看| 最近中文字幕日韩精品| 国产一区在线免费观看| 国产精品sss| 欧美日韩视频一区二区三区| 毛片av中文字幕一区二区| 久久xxxx精品视频|