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.
FactorSquareFreeListis cheaper than full factorization. Then check that all exponents other than for the constant term are even. – Daniel Lichtblau Jan 27 '17 at 23:49Falseif plugging in a value for x results in a non-square number. – Greg Hurst Jan 28 '17 at 00:26