对非常大的数进行算术运算的算法

时间:2011-08-05 06:43:48

标签: c algorithm math largenumber

我需要一个算法来对大数字执行算术运算(就像浮点数,双重int或任何其他数据类型一样)。我需要在C中编写代码。我试着在这里查找: Knuth,Donald,计算机程序设计的艺术,国际标准书号0-201-89684-2,第2卷:研究数值算法,第4.3.1节:经典算法但无法忍受。我只需要算法而不是代码。

5 个答案:

答案 0 :(得分:3)

另外,据我所知,你不会比简单的线性O(n)算法好多了,即只是逐位加法。你可能还是必须阅读整个输入,所以它至少是线性的。你可以做各种技巧来使常数降低。

由于基本长乘法算法的二次性,你的主要问题是乘法。您可能想要考虑here给出的几种更快的方法之一。 Karatsuba方法实现起来有点棘手但可能是最简单的非平凡算法,可以为您带来收益。否则,您必须更多地了解快速傅里叶变换方法,例如Schönhage-Strassen's algorithmFürer's algorithm

另见Big O notation

答案 1 :(得分:3)

我认为Karatsuba算法最适合对大数字进行算术运算。对于足够大的n,另一种推广,即Schönhage-Strassen算法,甚至更快。 您可以在中查找算法 Karatsuba 要么 Karatsuba_Multiplication

答案 2 :(得分:2)

没有算法可以对非常大的数字执行算术运算。算术运算保持不变。你需要的是像http://www.codeproject.com/KB/cs/BigInt.aspx

这样的课程

答案 3 :(得分:1)

Riesel的书素数和计算机方法有一个附录,其中包含易于阅读的多精度算术代码。

答案 4 :(得分:0)

对于算法,请阅读Knuth vol 2或Crandall和Pomerance。对于编码,我建议先使用明显的算法,然后再进行Karatsuba或Fourier变换。

相关问题