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

計算最大公約數的兩種算法(轉)

原文地址

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

其算法用C++語言描述為:
int gcd(int m, int n)
{
if (m == 0)
  return n;
if (n == 0)
  return m;
if (m < n)
{
  int tmp = m;
  m = n;
  n = tmp;
}
while (n != 0)
{
  int tmp = m % n;
  m = n;
  n = tmp;
}

return m;
}

Stein算法(以下理論請參考http://blog.vckbase.com/arong/archive/2004/06/15/458.html),代碼是我加上的。

歐幾里德算法是計算兩個數最大公約數的傳統算法,他無論從理論還是從效率上都是很好的。但是他有一個致命的缺陷,這個缺陷只有在大素數時才會顯現出來。
考慮現在的硬件平臺,一般整數最多也就是64位,對于這樣的整數,計算兩個數之間的模是很簡單的。對于字長為32位的平臺,計算兩個不超過32位的整數的模,只需要一個指令周期,而計算64位以下的整數模,也不過幾個周期而已。但是對于更大的素數,這樣的計算過程就不得不由用戶來設計,為了計算兩個超過 64位的整數的模,用戶也許不得不采用類似于多位數除法手算過程中的試商法,這個過程不但復雜,而且消耗了很多CPU時間。對于現代密碼算法,要求計算 128位以上的素數的情況比比皆是,設計這樣的程序迫切希望能夠拋棄除法和取模。

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

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

gcd(a,a) = a,也就是一個數和他自身的公約數是其自身
gcd(ka,kb) = k gcd(a,b),也就是最大公約數運算和倍乘運算可以交換,特殊的,當k=2時,說明兩個偶數的最大公約數必然能被2整除
有了上述規律就可以給出Stein算法如下:

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

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

其算法用C++語言描述為:
bool is_even(int n)
{
return !(n & 1);
}
int gcd2(int m, int n)
{
int c = 1;
while (m != 0 && n != 0)
{
  if (is_even(m) && is_even(n))
  {
   m >>= 1;
   n >>= 1;
   c <<= 1;
  }
  else if (is_even(m) && !is_even(n))
  {
   m >>= 1;
  }
  else if (!is_even(m) && is_even(n))
  {
   n >>= 1;
  }
  else if (!is_even(m) && !is_even(n))
  {
   int m1 = m;
   int n1 = n;
   m = abs(m-n);  //crt庫函數
   n = min(m1, n1);//crt宏
  }
}

return c * n;
}

posted on 2008-10-09 08:21 FongLuo 閱讀(249) 評論(0)  編輯 收藏 引用


只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


<2008年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

導航

常用鏈接

留言簿

隨筆分類(11)

隨筆檔案(79)

文章檔案(1)

收藏夾(38)

學習網站

一般網站

最新隨筆

搜索

積分與排名

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美日韩精选| 国产精品你懂的| 亚洲三级电影全部在线观看高清| 欧美在线播放| 国产亚洲精品aa午夜观看| 久久福利资源站| 久久久精品网| 亚洲精品在线一区二区| 女女同性精品视频| 欧美ab在线视频| 亚洲神马久久| 亚洲欧美在线观看| 精品盗摄一区二区三区| 欧美成人精品影院| 欧美日韩综合在线免费观看| 性欧美激情精品| 久久久精品国产一区二区三区| 欧美屁股在线| 欧美亚洲日本国产| 久久久.com| 亚洲一区二区动漫| 久久大香伊蕉在人线观看热2| 久久一区免费| 亚洲亚洲精品三区日韩精品在线视频 | 欧美丰满高潮xxxx喷水动漫| 欧美黑人多人双交| 亚洲线精品一区二区三区八戒| 免费高清在线视频一区·| 你懂的国产精品| 亚洲资源在线观看| 久久久综合网站| 亚洲欧美视频在线观看| 久久夜色精品国产| 亚洲尤物在线| 欧美电影在线| 久久久亚洲精品一区二区三区| 午夜免费电影一区在线观看| 亚洲乱码国产乱码精品精98午夜| 免费亚洲视频| 国产精品一区二区三区久久| 欧美不卡在线| 国产亚洲精品久| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | aa日韩免费精品视频一| 久久久噜噜噜久噜久久| 亚洲一区高清| 欧美精品一区二区三区一线天视频| 亚洲精品美女在线观看| 久久国产成人| 久久激情中文| 国产精品毛片高清在线完整版| 亚洲午夜伦理| 欧美另类久久久品| 亚洲成人自拍视频| 国内成+人亚洲+欧美+综合在线| 欧美在线精品免播放器视频| 欧美精品二区| 亚洲电影在线| 亚洲人成在线影院| 久久躁日日躁aaaaxxxx| 久久综合久久综合久久综合| 国产亚洲精品v| 欧美一区在线看| 久久看片网站| 极品av少妇一区二区| 久久精品亚洲| 久久视频在线视频| 激情综合色丁香一区二区| 久久精品人人爽| 免费成人性网站| 亚洲人成亚洲人成在线观看| 欧美aaaaaaaa牛牛影院| 亚洲人体1000| 亚洲一区二区三区在线视频| 国产精品极品美女粉嫩高清在线| 玖玖国产精品视频| 在线不卡欧美| 欧美激情视频在线播放| 亚洲精品少妇30p| 亚洲直播在线一区| 国产欧美视频一区二区| 亚洲永久免费精品| 久久av一区二区三区| 国产亚洲电影| 免费成人高清在线视频| 亚洲人成亚洲人成在线观看| 一本大道久久精品懂色aⅴ| 欧美日韩国产123| 一级成人国产| 久久精品国产亚洲高清剧情介绍| 欧美日本三区| 亚洲综合日韩在线| 乱中年女人伦av一区二区| 亚洲精品欧美| 国产欧美日韩在线观看| 开心色5月久久精品| 亚洲精品五月天| 性高湖久久久久久久久| 亚洲国产精品一区二区第一页 | 久久久久99精品国产片| 亚洲电影观看| 国产精品成人播放| 久久aⅴ国产紧身牛仔裤| 亚洲高清不卡在线| 欧美一区二区三区在| 亚洲激情视频在线播放| 国产精品日日摸夜夜摸av| 久久人人爽人人爽| 在线亚洲伦理| 欧美韩日精品| 久久久久99| 亚洲视频在线观看免费| 在线看欧美日韩| 国产精品美女主播| 欧美精品亚洲二区| 久久久精品一品道一区| 亚洲在线观看视频网站| 亚洲国产导航| 鲁大师成人一区二区三区| 亚洲欧美日韩国产| 亚洲精品视频在线播放| 一色屋精品视频在线看| 国产精品一区二区久激情瑜伽| 亚洲中无吗在线| 亚洲精品日本| 亚洲电影激情视频网站| 玖玖在线精品| 久久精品在线观看| 午夜精品在线观看| 亚洲午夜在线观看| 日韩午夜免费视频| 亚洲精品一区二区三区99| 国产主播精品在线| 国产欧美日韩一区二区三区在线| 久久激情视频久久| 午夜精品福利视频| av不卡在线| av成人手机在线| 日韩亚洲欧美一区| 亚洲精品自在久久| 亚洲茄子视频| 亚洲精品一区二区三区四区高清 | 韩日精品视频一区| 国产精品视频| 国产伦一区二区三区色一情| 国产精品美女久久久久久免费| 性久久久久久久久久久久| 中文在线一区| 亚洲自拍偷拍视频| 亚洲欧美日韩系列| 亚洲欧美日本另类| 亚洲网站在线| 亚洲欧美视频在线| 午夜宅男久久久| 久久精彩免费视频| 久久久久久穴| 欧美高清免费| 欧美色欧美亚洲另类二区| 欧美午夜免费影院| 国产欧美精品在线| 国产主播一区二区三区| 亚洲福利在线观看| 亚洲精品久久嫩草网站秘色| av成人免费在线观看| 亚洲在线一区二区| 久久久亚洲精品一区二区三区| 亚洲精品女av网站| 亚洲影院在线| 久久久久久久性| 亚洲大胆女人| 一区二区免费在线播放| 欧美一区二区三区久久精品| 麻豆精品一区二区综合av | 小嫩嫩精品导航| 久久亚洲视频| 91久久精品国产91性色| 日韩视频在线播放| 亚洲欧美三级在线| 免费看精品久久片| 国产精品任我爽爆在线播放| 尤妮丝一区二区裸体视频| 亚洲视频网在线直播| 久久九九国产精品| 亚洲精品乱码久久久久久蜜桃91| 欧美 日韩 国产一区二区在线视频| 亚洲综合社区| 男人的天堂亚洲在线| 亚洲精品一区二| 久久久久成人精品| 欧美性大战久久久久久久| 激情欧美一区二区| 一区二区三区蜜桃网| 老巨人导航500精品| 日韩亚洲在线| 久久综合狠狠| 国产伊人精品| 午夜精品亚洲| 亚洲精品一区二区在线观看| 久久久噜噜噜久久人人看| 国产精品美女久久久久av超清 |