在C中计算非常大的unsigned int

时间:2018-03-22 02:30:26

标签: c biginteger

我有32个字节的数字,并将它们存储在uint8_t *缓冲区中。 如何计算C中的32字节数? 示例:add,mod,multiplication 谢谢!

2 个答案:

答案 0 :(得分:1)

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

现在,你不必自己重新发明轮子;这些" Big Integer"有几个FOSS库。或BigInt结构,例如this one或@deamentiamundi建议的更受欢迎的LibTomMath。如果您不仅限于C,那么在C ++中甚至还有更多这些。

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

答案 1 :(得分:0)

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