繁体   English   中英

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

[英]Algorithm for doing arithmetic operation on very large numbers

我需要一种算法来对大数执行算术运算(这超出了float,double int或任何其他数据类型的范围)。 我需要用C编写代码。我尝试在此处查找: Knuth,Donald,计算机编程艺术,ISBN 0-201-89684-2,第2卷:半数值算法,第4.3.1节:经典算法,但是受不了了。 我只需要算法而不是代码。

另外,据我所知,您不会比简单的线性O(n)算法好得多,也就是说,只需逐位相加即可。 您可能必须无论如何都要读取整个输入,因此至少是线性的。 您可能可以做各种技巧来降低常数。

由于基本长乘法算法的二次性质,您的主要问题将是乘法。 您可能需要考虑这里给出的几种更快的方法之一。 Karatsuba方法很难很好地实现,但它可能是最简单的非平凡算法,可以为您带来收益。 否则,您将不得不更多地研究快速傅立叶变换方法,例如Schönhage-Strassen的算法Fürer的算法

另请参见Big O符号

我认为Karatsuba算法最适合对大数执行算术运算。对于足够大的n,另一种泛化算法Schönhage–Strassen算法甚至更快。 您可以在KaratsubaKaratsuba_Multiplication中查找算法

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

Riesel撰写的《质数和因式分解计算机方法 》一书的附录包含了易于阅读的多精度算术代码。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM