加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 03:20:24 所属栏目:百科 来源:网络整理
导读:我正在寻找允许我用n和d 32或64位整数计算(2 ^ n)%d的算法. 问题是即使使用多精度库也不可能将2 ^ n存储在内存中,但也可能存在使用32或64位整数来计算(2 ^ n)%d的技巧. 非常感谢你. 解决方法 看看 Modular Exponentiation algorithm. 这个想法不是计算2 ^
我正在寻找允许我用n和d 32或64位整数计算(2 ^ n)%d的算法.

问题是即使使用多精度库也不可能将2 ^ n存储在内存中,但也可能存在使用32或64位整数来计算(2 ^ n)%d的技巧.

非常感谢你.

解决方法

看看 Modular Exponentiation algorithm.

这个想法不是计算2 ^ n.而是在上电时减少模数d. That keeps the number small.

将方法与Exponentiation by Squaring组合,您只能在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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读