c - Toom-Cook乘法算法实现

标签 c algorithm biginteger largenumber

我的任务是实现 Toom-Cook 三向乘法算法。我正在关注维基百科上的描述 http://en.wikipedia.org/wiki/Toom%E2%80%93Cook_multiplication ,我设法将两个大数字存储到字符串中,并根据维基百科页面上的“拆分”步骤将字符串拆分为较小的字符串。下一步是“评估”,我必须计算一个新数字 p0 = m0 + m2(Bordrato 的“更快评估”- 在同一页上找到),其中 m0 和 m2 是我通过拆分大数创建的数字(在上一步中)。问题是我不能简单地将 m0 和 m2 相加,因为这两个数字仍然可能非常大并且不可能以标准方式相加。这是否意味着我必须实现自己的算法来添加大数(以及减法和除法,因为它们也是必需的),或者我错过了什么?如果有人能给我链接一个可能的实现甚至伪代码,我们将不胜感激。

最佳答案

您必须实现自己的加法、减法、取模等方法。前段时间我试图实现一个 BigInteger 库,我发现了一些可能对您有用的资源。

  • BigNum Math 书(如前一个答案所指出的)
  • Java OpenJdk BigInteger implementation , 有文档
  • 算法和数据结构基本工具箱,(我学过这本书的Karatsube)。

顺便说一句,我建议您使用基数为 2 的数字 ( see here. ),因为您可以利用计算机的特性使您的操作更加简单快捷。

关于c - Toom-Cook乘法算法实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16430745/

相关文章:

c - 在作用域的开头声明 C89 局部变量?

algorithm - 我可以使用什么算法来构建调查?

algorithm - 寻路算法测试工具

iphone - 具有快速 modpow 的 BSD 许可大整数 C 库

java - Java 中的超大型斐波那契数列

java - Java 中 BigInteger 的问题

c - 如何反转蒯因?

Couchbase - 如何使用 C API 查询 View - libcouchbase

使用指针更改原始字符串的值

algorithm - 给定颜色和 alpha,添加什么颜色和 alpha 来创建所需的颜色?