Computing one billion roots using the tangent Graeffe method


Let be a prime of the form with small and let denote the finite field with elements. Let be a polynomial of degree in with distinct roots in . For we can compute the roots of such polynomials of degree . We believe we are the first to factor such polynomials of size one billion. We used a multi-core computer with two 10 core Intel Xeon E5 2680 v2 CPUs and 128 gigabytes of RAM. The factorization takes just under 4,000 seconds on 10 cores and uses 121 gigabytes of RAM.

We used the tangent Graeffe root finding algorithm from ISSAC 2016 and ICMS 2020 which is a factor of faster than the Cantor–Zassenhaus algorithm. We implemented the tangent Graeffe algorithm in C using our own library of 64 bit integer FFT based in-place polynomial algorithms then parallelized the FFT and main steps using Cilk C.

In this article we discuss the steps of the tangent Graeffe algorithm, the sub-algorithms that we used, how we parallelized them, and how we organized the memory so we could factor a polynomial of degree . We give both a theoretical and practical comparison of the tangent Graeffe algorithm with the Cantor–Zassenhaus algorithm for root finding. We improve the complexity of the tangent Graeffe algorithm by a factor of 2. We present a new in-place product tree multiplication algorithm that is fully parallelizable. We present some timings comparing our software with Magma's polynomial factorization command.

Polynomial root finding over smooth finite fields is a key ingredient for algorithms for sparse polynomial interpolation that are based on geometric sequences. This application was also one of our main motivations for the present work.

Authors: Joris van der Hoeven, Michael Monagan

View: Html, TeXmacs, Pdf, BibTeX