FAST INTEGER MULTIPLICATION USING MODULAR ARITHMETIC
We give an N . log N . 2(O(log)* (N)) time algorithm to multiply two N-bit integers that uses modular arithmetic for intermediate computations instead of arithmetic over complex numbers as in Furer's algorithm, which also has the same and so far the best known complexity. The previous best algorithm using modular arithmetic (by Schonhage and Strassen) has complexity O(N . log N . log log N). The advantage of using modular arithmetic as opposed to complex number arithmetic is that we can completely evade the task of bounding the truncation error due to finite approximations of complex numbers, which makes the analysis relatively simple. Our algorithm is based upon Furer's algorithm, but uses fast Fourier transform over multivariate polynomials along with an estimate of the least prime in an arithmetic progression to achieve this improvement in the modular setting. It can also be viewed as a p-adic version of Furer's algorithm.
integer multiplication modular arithmetic fast fourier transform