算法C/C++:用n和d 32或64位整数计算(2^n)%d的最快方法
Algorithm C/C++ : Fastest way to compute (2^n)%d with a n and d 32 or 64 bit integers
我正在寻找一种算法,该算法允许我用n和d 32或64位整数计算(2^n)%d
。
问题是,即使使用多精度库,也不可能将2^n
存储在内存中,但可能存在仅使用32或64位整数计算(2^n)%d
的技巧。
非常感谢。
看看模块化指数算法。
这个想法不是计算2^n
。相反,您可以在通电时多次降低模量d
。这使数字保持较小。
将该方法与"平方幂"相结合,只需O(log(n))
步即可计算出(2^n)%d
。
这里有一个小例子:2^130 % 123 = 40
2^1 % 123 = 2
2^2 % 123 = 2^2 % 123 = 4
2^4 % 123 = 4^2 % 123 = 16
2^8 % 123 = 16^2 % 123 = 10
2^16 % 123 = 10^2 % 123 = 100
2^32 % 123 = 100^2 % 123 = 37
2^65 % 123 = 37^2 * 2 % 123 = 32
2^130 % 123 = 32^2 % 123 = 40
相关文章:
- 是否有一种标准方法来计算两个 asctime() 值之间的天数
- 有没有一种惯用的方法可以在不存储变换或不必要地重新计算的情况下找到数组变换的最小/最大值?
- 寻求提高Microsoft密封库计算效率的方法
- 在 C++20 计算范围内相邻对的最简洁明了的方法是什么?
- 计算浮点余数的最佳方法
- 计算将整数n分解为4平方和的方法的数量
- 计算两个uint8_t变量之间差值的最快方法是什么?
- 使用 MC 方法计算积分
- 计算 <Classtype*> 向量中所有项的布尔值的最有效方法,如果全部为真则返回 true
- C++ std::string 中是否有任何函数可以计算两个字符串的相同起始字符的总数或任何最佳方法
- C/C++ 方法中最快/最短计算二进制数字总和/又名二进制中的 1 数
- 对于我扩展此程序来计算最高10x10矩阵的倒数的最简单方法是什么
- 什么是计算C中PI的最有效方法
- 是否有一种计算CGAL中Surface_mesh对象的PCA的方法
- 是否有任何数据类型或方法可以计算当前单元格中先前数组单元格的总和
- 有没有一种简单的方法来计算库中记录的函数
- 复数程序编译时的计算方法错误
- 数据包CRC计算方法
- C++中错误的计算方法
- 编译器本身使用并行计算方法运行