当前位置: 首页 > 知识库问答 >
问题:

在MIT开放课件中解释这个Power Mod B^E Mod M bruteforce算法

冯阳云
2023-03-14

你能一步一步解释一下逻辑吗,我没有得到他们迭代1到8的部分

POWMOD(B, E, M, N)
1 R = ONE(N) // result
2 X = COPY(B, N) // multiplier
3 for i = 1 to N
4     mask = 1
5     for bit = 1 to 8
6         if E[i] & mask != 0
7             R = MOD(MULTIPLY(R, X, N), M, 2N)
8         X = MOD(MULTIPLY(X, X, N), M, 2N)
9         mask = LSB(mask · 2)
10 return R

这里是实际问题集的链接

http://ocw.mit.edu/courses/electrice-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/assignments/mit6_006F11_ps5.pdf

共有1个答案

翟奇逸
2023-03-14

它是Paul Hankin指出的用平方算法进行模幂运算。

我们首先迭代E中的每个字/字节(E[i]有8位,E是N字节长)

对于当前字节中的每个位,我们开始对字节中的位进行迭代,这是使用mask变量完成的,mask被初始设置为1,所以按位和E[1]的,0000001基本上检查字的最后一位(LSB)是否为1,每次迭代,我们通过简单地乘以2将mask左移。位=2掩码的ie为00000010,依此类推直到掩码变为100000000

如果E上的位为1,我们将X的当前值与结果相乘。

因此例如要计算B^(00000011)%M

我们只需计算((B%M)*(B^2)%M)%M

 类似资料:
  • 我试图找到一个简单问题的直接答案...在这里它是... 假设你有一个硬币更换算法,在面值为d(1)=1、d(2)=7和d(3)=10的系统中,n=10。 现在给出了教科书中算法的实现。。 结果会不会是:“使用10枚面额为1的硬币”? 这是因为当然,以我的理解,denom[1]=1,denom[2]=7,denom[3]=10。正确吗? 如果是这样的话,这个算法就不会被认为是最优的,对吗? 但是,代

  • Copyright (c) 2014 - 2017, British Columbia Institute of Technology Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (th

  • 我是Hibernate和JPA的新手,我对这个注释有问题。有人能简单地解释一下这个注释到底在做什么吗?因为在这种情况下,文档对我来说很难理解。 编辑我明白什么是持久上下文,但在代码中,我有这样的例子: 我对@PerustenceContext做什么有问题。抱歉,也许我没有具体说明。

  • 来自正式的JavaJDK1。导游,我得到了这句话,但我不明白它是怎么起作用的。有人能解释一下吗?换句话说,当菱形传递空字符串时,它如何推断整数类型? 在本例中,编译器为泛型类MyClass的形式类型参数X推断类型整数。它为这个泛型类的构造函数的形式类型参数T推断类型字符串。

  • 问题内容: 我在使用Java在Windows中删除文件时遇到一些问题。由于某种原因,java会锁定我的文件,但我不知道为什么。这是我的代码: file.delete()以及在资源管理器中手动尝试拒绝删除该文件,因为它仍在使用中。尽管在Linux中一切似乎都很好。 我在某处缺少close()吗?我可以确认首先使文件成为关闭文件的方法,因为我可以在使用file.delete()运行上述代码之前删除文件

  • 我对学习如何用foldLeft函数在scala中实现Kadane(最大子数组和)算法感兴趣。我在堆栈溢出中运行了这个示例,但我不确定我是否理解该算法的确切功能。这就是算法的样子: 中包含的内容是否是需要应用于每个元素的lambda函数?还有,这行到底做什么?为什么括号里的括号用空格隔开?我很感激任何帮助,如果我的问题让人觉得太无知,我很抱歉,但我对Scala是新手