最新公告
  • 欢迎您光临欧资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • Stein算法的正确性算法是计算两个数的传统算法

    2、斯坦算法

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

    考虑到目前的硬件平台c语言公约数和公倍数,一般整数最多为64位。对于这样的整数,计算两个数之间的模非常简单。对于字长为 32 位的平台,计算两个不超过 32 位的整数的模只需要一个指令周期,而计算一个小于 64 位的整数的模只需要几个周期。然而,对于较大的素数,这样的计算过程必须由用户自己设计。为了计算两个超过 64 位的整数的模,用户可能不得不使用类似于手动多位数除法的试商方法。这个过程不仅复杂,而且消耗大量的CPU时间。对于现代密码算法,有很多情况需要计算128位以上的素数,这类程序的设计急于放弃除法和取模。

    Stein 算法是 J. Stein 在 1961 年提出的。这种方法也是计算两个数的最大公约数。与欧几里得算法不同,Stein 算法只有整数移位和加减法c语言公约数和公倍数,这对程序员来说是一个福音。

    为了说明Stein算法的正确性,我们首先要注意以下结论:

    gcd(a,a) = a,即一个数和它自己的公约数就是它自己

    gcd(ka,kb) = k gcd(a,b),即最大公约数运算和乘法运算可以互换。特别是,当k=2时,表示两个偶数的最大公约数一定能被2整除

    C++/java 实现

    // c++/java stein算法

    int gcd(int a,int b){

    如果(ab{

    int temp = a;

    a = b;

    b=温度;

    }

    if(0==b)//基本情况

    返回一个;

    if(a%2==0 && b%2 ==0)//a 和 b 是偶数

    返回 2*gcd(a/2,b/2);

    if ( a%2 == 0)//只有a是偶数

    返回 gcd(a/2,b);

    if ( b%2==0 )// 只有 b 是偶数

    返回 gcd(a,b/2);

    return gcd((a+b)/2,(a-b)/2);// a 和 b 是奇数

    }

    2.最小公倍数:

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

    步骤:

    一、求最大公约数

    二、 最小公倍数是两个数除以最大公约数的乘积。

    站内大部分资源收集于网络,若侵犯了您的合法权益,请联系我们删除!
    欧资源网 » Stein算法的正确性算法是计算两个数的传统算法

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    欧资源网
    一个高级程序员模板开发平台

    发表评论