除了学校方法之外,还有更快的方法来划分大整数(1000位或更多位数)吗?
答案 0 :(得分:5)
维基百科列出multiple division algorithms。请参阅Computational complexity of mathematical operations,其中Schoolbook long division列为O(n^2)
,Newton's method列为M(n)
,其中M
是所用乘法算法的复杂程度,可以是好于O(n log n 2^(
log*
n))
渐近。
从one of the multiplication algorithms的讨论中注意到渐近的最佳算法不一定是“小”输入的最快算法:
在实践中,Schönhage-Strassen算法开始优于旧方法,例如Karatsuba和Toom-Cook乘法,数字超过2 ^(2 ^ 15)到2 ^(2 ^ 17)(10,000到40,000十进制数字)。 GNU多精度库使用它作为至少1728到7808个64位字(111,000到500,000十进制数字)的值,具体取决于体系结构。 Schönhage-Strassen有一个Java实现,它使用它超过74,000个十进制数字。