Toom-Cook乘法算法实现

问题描述 投票:0回答:2

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

c algorithm biginteger largenumber
2个回答
1
投票

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

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

顺便说一句,我建议使用base 2作为你的数字(see here.)因为你可以利用计算机的本质来使你的操作更加轻松快捷。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.