c++ - 模位集算法

标签 c++ algorithm binary modulo bitset

假设我有 2 个位集

bitset<1024> test, current;

我应该如何取模 currenttest并在另一个 bitset<1024> 中输出?注意 test可以是任何形式,而不仅仅是 2 的幂?

寻找完整代码或完整伪代码的答案。除了bitset,我不会接受涉及转换为另一种类型的答案。因为虽然在这里使用 bitsets 可能会工作得更慢,但在程序后面的 bitsets 会非常快。

最佳答案

如果您不想自己实现取模算法,可以尝试以下方法:

  1. 代替std::bitset,使用boost::dynamic_bitset .
  2. 使用boost::to_block_range将位集的字节复制到缓冲区。
  3. 使用众多 bigint 库之一来表示一个 256 字节的整数。
  4. 使 256 字节的 bigint 使用在步骤 #2 中复制的字节。
  5. 对 bigint 进行模运算。
  6. 将结果转换回 dynamic_bitset
  7. 利润

希望有一个 bigint 库可以让您访问它的缓冲区,这样您就可以将字节从 dynamic_bitset 直接复制到 bigint 中。

希望与模运算本身相比,复制 256 个字节的开销可以忽略不计。

哦,bigint 表示应该与 dynamic_bitset 具有相同的字节顺序。

关于c++ - 模位集算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9080103/

相关文章:

algorithm - 为什么贪心找零算法对某些币组不起作用?

algorithm - 如何解决以下图形游戏

在另一个成员函数中使用时,C++ 成员函数错误 "Undeclared Identifier"

c++ - 在处理序列化时我应该硬编码变量大小吗? C++

python - De Casteljau 算法忽略一个控制点

c++ - 从 C++ 文件中读取 ASCII 码和二进制码

我们可以在没有 fopen 的情况下用 C 打开二进制文件吗?

java - 将二进制文件读入字节数组

c++ - 根据常量整数字段设置数组字段的长度

c++ - Eclipse CDT : cannot debug or terminate application