专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
Montgomery 快速幂模算法
2019-04-13 17:13
发布
生成海报
站内文章
/
模拟电子
13054
0
1632
快速计算乘方的算法:
如计算2^13,则传统做法需要进行12次乘法。
//计算n^p unsigned power(unsigned n,unsigned p) { for(int i = 0; i < p; i++) n *= n; return n; }
优化如下: 把2*2的结果保存起来:4*4*4*4*4*4*2
再把4*4的结果保存起来:16*16*16*2
一共5次运算,分别是2*2、4*4和16*16*16*2
unsigned int power(unsigned int n, unsigned int p) { // 计算n的p次方 unsigned int tmp = 1; while (p > 1) { // 判断p是否奇数,偶数的最低位必为0 if (( p & 1 )!=0) { tmp *= n; // 若p为奇数,则把“剩下的”乘起来 } n *= n; p >>= 1; } return n * tmp; // 最后把主体和“剩下的”乘起来作为结果 }
Montgomery 快速幂模算法:
// Montgomery快速幂模算法 (n ^ p) % m, 与power算法极类似 unsigned int Montgomery(unsigned int n, unsigned int p, unsigned int m) { unsigned int r = n % m; unsigned int tmp = 1; while (p > 1) { if ((p & 1)!=0) { tmp = (tmp * r) % m; } r = (r * r) % m; p >>= 1; } return (r * tmp) % m; }
Ta的文章
更多
>>
Montgomery 快速幂模算法
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮