Polynomial factorization is one of the fundamental tools of the computer algebra systems. And in symbolic mathematics, it is one of the basic requirement over which other algorithms can be implemented. Currently, SymEngine has the implementation of Univariate Polynomial class, which provides us the basic functionality to add, multiply and subtract two polynomials.

Now, comes the problem of factoring the polynomials and then other modular arithmetics and, `gcd`

and `lcm`

.

Therefore, we need to have a module, which can convert the polynomial into a finite field (or Galois Field), do basic operations of `add`

, `mul`

, `div`

etc. on them and then the algorithms for factorization like:

After doing factorization, we will be able to find roots, which in turn will help us to solve univariate polynomial equations. Then for returning solution, `Set`

are the simplest and most intuitive way. Like in real pen-paper exam, we are supposed to return solutions in form of sets. So, here also, following the way sympy has been adapting to `solveset`

, we should develop a basic infrastructure, over which `solveset`

can be developed.