算法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

本文关键字:计算 方法 整数 64位 C++ 算法      更新时间:2023-10-16

我正在寻找一种算法,该算法允许我用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