C++ 算法C/C++;:使用n和d 32或64位整数计算(2^n)%d的最快方法

C++ 算法C/C++;:使用n和d 32或64位整数计算(2^n)%d的最快方法,c++,algorithm,32bit-64bit,C++,Algorithm,32bit 64bit,我正在搜索一种算法,该算法允许我使用n和d32或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

我正在搜索一种算法,该算法允许我使用n和d32或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

是的,你说得对。考虑到我的背景,我应该更清楚这一点。。。英雄联盟