algorithm - 2^n mod (m) 算法

标签 algorithm recursion complexity-theory modular

在类里面,我们学习了 2^n mod(m) 的算法。

    to find 2^n mod(m){  
      if n=0 {return 1;}  

      r=2^(n-1)mod(m);  
      if 2r < m {return 2r;}  
      if 2r > =m {return 2r-m;}  
    }

我们被告知运行时间是 O(n*size(m)),其中 m 的大小是 m 中的位数。

我理解 n 部分,但我无法解释 size(m) 除非是因为涉及减法。任何人都可以阐明这一点吗?

提前致谢。

最佳答案

n 部分很清楚,因为您已经了解了自己。 size(m)(这是 m 中的位数,基本上是 log(m))是因为 mod。即使您的 CPU 在一条指令中为您执行此操作,它也需要 log(m)(假设是 32 位)次。如果 m 非常大,这在加密 key 中很常见,这可能会变得相当大。

为什么 m 中的位数?记住除法:

abcdefghijk | xyz
            |-----
alm         | nrvd...
 opq
  stu
   wabc
    .......

减的次数最多为被除数的位数。

关于algorithm - 2^n mod (m) 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7747946/

相关文章:

algorithm - 为球体(行星)制作无缝高度图纹理

algorithm - 分而治之 - 比较所有可能的组合

javascript - 检测无限递归?

java - 新的 BigInteger(String) 性能/复杂性

algorithm - P类语言的线性时间减少,复杂性影响

algorithm - 次线性但简单的动态凸包算法?

php - 寻找对相似数据进行分组的算法

algorithm - 您什么时候会使用 KMP 而不是 BOYER-MOORE

Java递归关于反转单个列表

Javascript-迭代嵌套对象,获取值和链接键