FFTによる乗算

世の中にはすごい人がいて、私が七転八倒しながらProject Eulerの問題を解いている一方、易々と華麗に解いている人もいる。


さて、Project Euler 258は、以前書いたように大きな整数の掛け算の速度が問題になる。よく知られているようにFFTを用いると高速に計算できる(理屈は忘れた)。しかし、こちらにもあるように、少し実装を知れば、整数の計算に実数を使うのはどうなのよ、という話になる。


そのリンク先に書いてあったことはさっぱり分からなかったが、確かどこかにFFTが使える限界が書いてあったなあと思って探したのがこれ。

FFT多倍長乗算器のVLSI 設計
http://almond.cs.uec.ac.jp/papers/pdf/2005/syunji-JSIAM9.pdf

これによると10進数100万桁以上までOKらしい。今回の計算は8万桁くらいなので、PythonFFTを使っていても余裕でOK。