Build a vector representation of the (n x n) circulant matrix of polynomial f
Based on the blog post:
https://alinush.github.io/2020/03/19/multiplying-a-vector-by-a-toeplitz-matrix.html
Compute the derivative of polynomial f
GG Algorithm 9.5
Divide f by g in nearly linear time
Compute a fast multiexp of many scalars times the same base
Only convenient for when called once with given base; if called
more than once, it’s faster to save the generated window table
Where indicated, algorithms are from Modern Computer Algebra, 3rd edition, by Gathen and Gerhard
Abbreviated as GG
Let M(n) denote the time to multiply.
GG Algorithm 9.3
Computes the inverse of f mod x^l
Takes O(M(l)) field arithmetic operations
GG chapter 9.1
Computes the rev_m(f) function in place
rev_m(f) = x^m f(1/x)
Computes the Toeplitz matrix of polynomial times the vector v