Purpose: Multiply two -bit integers in — the first improvement on Schönhage-Strassen after 36 years (Martin Fürer, 2007).

The Idea

Schönhage-Strassen works in , where roots of unity are powers of 2 and twiddle multiplications are free shifts — but only of them exist, which forces the recursion to shrink block sizes by a square root each level, costing the factor.

Fürer works instead in a ring

that contains both:

  • a small set of “fast” roots of unity (powers of , so multiplying by them is a cyclic shift — free), and
  • a large set of ordinary roots of unity (which cost real multiplications).

The FFT is then arranged so that most levels use the fast roots and only levels need the expensive ones. That is where the iterated logarithm comes from.

Complexity

Since for every below , the factor is a constant for all practical purposes — but a constant nobody has ever measured, because the algorithm has never been implemented competitively.

A galactic algorithm

Fürer’s is the textbook example of a galactic algorithm: asymptotically superior, but only for inputs larger than anything that will ever exist. Estimates put the crossover with Schönhage-Strassen far beyond the number of atoms in the observable universe.

The others in this category worth recognising:

AlgorithmBeats the practical option abovePractical?
Fürer multiplicationastronomically large no
Harvey-van der Hoeven no
Coppersmith-Winograd matrix multiplyenormous matricesno
Pettie-Ramachandran MSTno (unanalysable)
Chen et al. max flownot yet
AKS primalityneverno

Why it matters anyway

The 2019 Harvey-van der Hoeven algorithm — which matches the conjectured lower bound — built directly on Fürer’s technique of mixing cheap and expensive roots of unity. Fürer’s paper broke a 36-year barrier and showed the was not intrinsic; that opened the door.

For a competitive programmer the lesson is a healthy one: asymptotic complexity is not running time. The Schönhage-Strassen and the Toom-3 both beat “faster” algorithms across every input size you will meet.

Variants / Use Cases