I want to check for a polynomial whether it is a perfect square.
Using the functions for polynomial factoring and decomposition, this is possible by first applying FactorList, after which you can check all these terms whether there is a polynomial that has degree equal the half of the original polynomial and divides the original polynomial twice. However, this seems like unoptimal use of Mathematica and takes time as well, as we have to iterate through a list.
Using Sqrt (a bit naive, I know) combined with PolynomialQ does not work either as Mathematica (rightly) doesn't simplify this.
Hence, my question is: is there any relatively simple (i.e. easier/less computationally heavy) method for determining whether a polynomial is a square?
Edit: three small examples:
CheckIfSquare[x^2 - 1] should give False.
CheckIfSquare[x^2 - 2x + 1] should give True as $x^2 - 2x + 1 = (x-1)^2$.
CheckIfSquare[x^3] should give False, even though x^3 is not squarefree, it is not a square itself.
FactorSquareFreeList
is cheaper than full factorization. Then check that all exponents other than for the constant term are even. $\endgroup$ – Daniel Lichtblau Jan 27 '17 at 23:49False
if plugging in a value for x results in a non-square number. $\endgroup$ – Chip Hurst Jan 28 '17 at 0:26