Toom-Cook乘法算法实现

时间:2013-05-08 00:24:23

标签: c algorithm biginteger largenumber

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

2 个答案:

答案 0 :(得分:1)

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

  • BigNum Math book(如前面的答案所指)
  • Java OpenJdk BigInteger implementation,带文档
  • 算法和数据结构基本工具箱,(我已经学习了本书的Karatsube)。

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

答案 1 :(得分:0)

LibTomMath是开源的,包括Toom-Cook乘法;看看。

相关问题