【问题标题】:Calculate very big unsigned int in C [duplicate]在C中计算非常大的无符号整数[重复]
【发布时间】:2018-08-31 08:31:31
【问题描述】:

我有 32 个字节的数字,我将它们存储在 uint8_t* 缓冲区中。 如何在 C 中计算一个 32 字节的数字? 示例:加法、模法、乘法 谢谢!

【问题讨论】:

  • Use GMP. 不客气。
  • 32 位数字?还是 32 字节的数字?
  • 是 32 字节数

标签: c biginteger


【解决方案1】:

你基本上需要像我们在小学学习的那样做数学:添加单个元素and保持一个进位字节;或多个每对字节元素,应用适当的偏移量并总结所有内容。自然,这都是循环。这些可以通过各种方式进行改进(例如 Karatsuba 的乘法算法,除此之外 - 离散 FFT can be used 用于固定大小元素数量的 O(n log(n)) 的乘法) - 但你应该从简单开始。

现在,您不必自己重新发明轮子;这些类型的“大整数”或 BigInt 结构有几个 FOSS 库,例如this one 或@deamentiamundi 建议的更受欢迎的LibTomMath。如果您不仅限于 C,那么 C++ 中的这些功能甚至更多。

最后 - 而不是使用单个字节 - 假设字节数可以被 2、4 或 8 整除,您可以使用 uint16_tuint32_tuint64_t 作为您使用的基本单位。

【讨论】:

    【解决方案2】:

    https://github.com/libtom/libtommath 可以找到的公共领域大整数 C 库 Libtommath 有一个优点:它包含对 libtommath/doc 中算法的完整且易于理解的描述(您将需要 Latex 来构建它从头开始,否则请向 Google 索取tommath.pdf 的副本)。与例如相比,即使是源代码也具有很好的可读性。 GMP!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-06
      • 2018-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-18
      • 1970-01-01
      相关资源
      最近更新 更多