我需要在Python中尽可能高效地乘以几个1000位数的长整数。这些数字是从文件中读取的。
我正在尝试实现整数乘法的Schönhage-Strassen算法,但我不得不理解它背后的定义和数学,特别是快速傅里叶变换。
任何理解此算法的帮助,如实际示例或某些伪代码都将受到高度赞赏。
答案 0 :(得分:4)
Knuth's TAOCP的第4.3.3章描述了它,并且在其他章节中也有一些可用于此的FFT伪代码。
答案 1 :(得分:2)
答案 2 :(得分:2)
不要重新发明轮子。 GMP具有该算法的出色的高性能实现,并且用纯Python编写的任何算法将至少慢100倍,因为Python是一种解释语言。使用gmpy从Python应用程序调用GMP。我也很好奇你正在做什么应用程序需要增加如此大的数字 - 可能有一种更简单的方法来处理你的问题。
另外,正如其他答案所提到的,“几千个数字长”并不足以证明Schönhage-Strassen的合理性(你必须至少有10000个十进制数字,可能更多)。像Toom-3这样的Toom-Cook的一些变体通常在此范围内使用。同样,不要自己在Python中编写 - GMP的实现经过了非常仔细的优化。