`

stein算法

 
阅读更多

欧几里德算法是计算两个数最大公约数的传统算法,他无论从理论还是从效率上都是很好的。但是他有一个致命的缺陷,这个缺陷只有在大素数时才会显现出来。

考虑现在的硬件平台,一般整数最多也就是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将更有优势。

stein算法实现:

unsigned int gcd(unsigned int a,unsigned int b){ 
if(!a) return b; 
else if(!b) return a; 
if(~a&0x1 && ~b&0x1) return 2*gcd(a>>1,b>>1); 
else if(~a&0x1 && b&0x1) return gcd(a>>1,b); 
else if(a&0x1 && ~b&0x1) return gcd(a,b>>1); 
else if(a>b) return gcd(a-b,b); 
else return gcd(b-a,a); 
}

 

links

en.wikipedia.org/wiki/Binary_GCD_algorithm

http://hi.baidu.com/cxh198412/blog/item/9977f8668628b121ab184caa.html

http://baike.baidu.com/view/3993128.htm

 

分享到:
评论

相关推荐

    最大公约数算法欧几里德和stein

    用c#实现的最大公约数算法欧几里德和stein,递归和非递归的都有了,stein算法在大数方面比欧几里德要好些

    C#,最大公约数(GCD)斯坦因(Stein)算法的源代码

    Stein算法是一种计算两个数最大公约数的算法,是针对欧几里德算法在对大整数进行运算时,需要试商导致增加运算时间的缺陷而提出的改进算法。欧几里德算法是计算两个数最大公约数的传统算法,无论从理论还是从实际...

    计算机网络安全实验 stein算法实验+javaweb演示程序

    自己写的jsp+servlet演示程序+实验报告,有源代码和war包,如果有自己的服务器,直接上传至tomcat下的webappp就可以演示了

    C/C++常用算法手册.秦姣华(有详细书签).rar

    9.6.2 计算最大公约数算法一一Stein算法 288 9.6.3 计算最大公约数示例 289 9.7 最小公倍数 290 9.8 素数 292 9.8.1 素数概述 292 9.8.2 计算素数算法 292 9.9 回文素数 294 9.9.1 回文素数概述 294 9.9.2 ...

    两种最大公约数算法的量化分析

    为了验证Euclid算法和Stein算法在高精度条件下的真实运行效率,以随机生成的多组高精度正整数,并分别按同位、异位、完全随机、斐波那契数列相邻项4种情况对这两种最大公约数算法的平均执行效率进行比较。...

    最大公约数

    求两个数的最大公约数,使用了Stein算法和欧几里得算法

    《算法导论》详细答案

    Instructorís Manual by Thomas H. Cormen Clara Lee Erica Lin to Accompany Introduction to Algorithms Second Edition by Thomas H. Cormen Charles E....Ronald L....Clifford Stein 算法导论详细答案

    leetcode感觉难度大-ds-algorithms:通过在Java中实现来学习和审查重要的数据结构和算法

    Stein 算法,第 4 版,作者:Robert Sedgewick 和 Kevin Wayne 算法设计手册,第 2 版,Steven Skiena 破解编码访谈,第 6 版,作者:Gayle Laakmann Mcdowell 在线资源: 算法,由 Robert Sedgewick 和 Kevin Wayne...

    求最大公约数和最小公倍数

    实现求两个整数的最大公约数和最小公倍数。求两个数的最大公约数和最小公倍数的方法有很多种,常用的有欧几里得算法和Stein算法。

    算法导论 +答案 MIT

    《算法导论》由Thomas H.Cormen、Charles E.Leiserson、Ronald L.Rivest、Clifford Stein四人合作编著(其中Clifford Stein是第二版开始参与的合著者)。本书的最大特点就是将严谨性和全面性融入在了一起。

    英文原版算法导论

    《算法导论》由Thomas H.Cormen、Charles E.Leiserson、Ronald L.Rivest、Clifford Stein四人合作编著(其中Clifford Stein是第二版开始参与的合著者)。本书的最大特点就是将严谨性和全面性融入在了一起。

    算法导论中文版

    《算法导论》由Thomas H.Cormen、Charles E.Leiserson、Ronald L.Rivest、Clifford Stein四人合作编著(其中Clifford Stein是第二版开始参与的合著者)。本书的最大特点就是将严谨性和全面性融入在了一起。 本书...

    算法导论第三版英文版

    《算法导论》由Thomas H.Cormen、Charles E.Leiserson、Ronald L.Rivest、Clifford Stein四人合作编著(其中Clifford Stein是第二版开始参与的合著者)。本书的最大特点就是将严谨性和全面性融入在了一起。

    求最大公约数最小公倍数及函数平均运行时间

    1:利用辗转相除法(函数嵌套和函数递归)、穷举法、更相减损术、Stein算法(非递归和递归)求出两个数的最大公约数或者/和最小公倍数 2:求每个函数运行时间,进行比较获得最长及最短平均运行时间。

    算法导论(英文版)

    《算法导论》由Thomas H.Cormen、Charles E.Leiserson、Ronald L.Rivest、Clifford Stein四人合作编著(其中Clifford Stein是第二版开始参与的合著者)。本书的最大特点就是将严谨性和全面性融入在了一起。

    算法导论 英文版 第三版

    《算法导论》由Thomas H.Cormen、Charles E.Leiserson、Ronald L.Rivest、Clifford Stein四人合作编著(其中Clifford Stein是第二版开始参与的合著者)。本书的最大特点就是将严谨性和全面性融入在了一起。

    算法导论-国外权威教材

    《算法导论》由Thomas H.Cormen、Charles E.Leiserson、Ronald L.Rivest、Clifford Stein四人合作编著(其中Clifford Stein是第二版开始参与的合著者)。本书的最大特点就是将严谨性和全面性融入在了一起。

Global site tag (gtag.js) - Google Analytics