请教算法达人,求a=b^c mod d 的快速算法

hlnpro 2003-08-19 11:13:30
如题
...全文
81 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaos 2003-08-27
  • 打赏
  • 举报
回复
int a, b, c, d;

a = 1;

int l = bitLength(c);

for (int i = l - 1; i >= 0; i --)
{
a = a * a % d;
if (bitAt(c, i) == 1)
a = a * b % d;
}

yaos 2003-08-27
  • 打赏
  • 举报
回复
原理是c从2进制转10进制呀
wshWaWa 2003-08-26
  • 打赏
  • 举报
回复
a初值为1
wbh0360 2003-08-22
  • 打赏
  • 举报
回复
to yaos(累了要歇歇了 销声匿迹一段时间·无心人)
不好意思哦,你写的我怎么看不懂,能说明白点吗,
a=a*a mod d,a的值还未知呢,这怎么算,请解释以下
wshWaWa 2003-08-21
  • 打赏
  • 举报
回复
如果该位为1,a=a*b mod d
~~~~~错了吧 a=a*a*b
Viali 2003-08-21
  • 打赏
  • 举报
回复
能否说明一下算法的原理?
yaos 2003-08-21
  • 打赏
  • 举报
回复
从c的最高位开始,
a=a*a mod d,
如果该位为1,a=a*b mod d
循环到最低位

不管是不是1都先 a=a*a mod d 的
BlueSky2008 2003-08-20
  • 打赏
  • 举报
回复
mark
yaos 2003-08-20
  • 打赏
  • 举报
回复
比如32位运算

512位的乘法为256次乘法运算,除法为大约512次乘法
总乘法次数(256 + 512 )* 512 * 2 = 768k左右

不能考虑快速乘法了,太复杂,节约的时间不很多

上面的分析很不完善,欢迎批评
yaos 2003-08-20
  • 打赏
  • 举报
回复
该算法是经过10年悟出的,原来我的算法比这个复杂

汇编都有相应的语句的,C实现也不难
yaos 2003-08-20
  • 打赏
  • 举报
回复
a=1
从c的最高位开始,
a=a*a mod d,
如果该位为1,a=a*b mod d
循环到最低位
LeeMaRS 2003-08-20
  • 打赏
  • 举报
回复
改进后的算法是O(logc)的复杂度, 非常好的了.
Alonefield 2003-08-20
  • 打赏
  • 举报
回复
b^c =
1. (b^(c/2))^2 c%2==0
2. b*(b^(c/2))^2 c%2==1
就酱紫

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧