Function: issquarefree
Section: number_theoretical
C-Name: issquarefree
Prototype: lG
Help: issquarefree(x): true(1) if x is squarefree, false(0) if not.
Description:
 (gen):bool       issquarefree($1)
Doc: true (1) if $x$ is squarefree, false (0) if not. Here $x$ can be an
 integer or a polynomial with coefficients in an integral domain.
 \bprog
 ? issquarefree(12)
 %1 = 0
 ? issquarefree(6)
 %2 = 1
 ? issquarefree(x^3+x^2)
 %3 = 0
 ? issquarefree(Mod(1,4)*(x^2+x+1))    \\ Z/4Z is not a domain !
  ***   at top-level: issquarefree(Mod(1,4)*(x^2+x+1))
  ***                 ^--------------------------------
  *** issquarefree: impossible inverse in Fp_inv: Mod(2, 4).
 @eprog\noindent A polynomial is declared squarefree if \kbd{gcd}$(x,x')$ is
 $1$. In particular a nonzero polynomial with inexact coefficients is
 considered to be squarefree. Note that this may be inconsistent with
 \kbd{factor}, which first rounds the input to some exact approximation before
 factoring in the apropriate domain; this is correct when the input is not
 close to an inseparable polynomial (the resultant of $x$ and $x'$ is not
 close to $0$).

 An integer can be input in factored form as in arithmetic functions.
 \bprog
 ? issquarefree(factor(6))
 %1 = 1
 \\ count squarefree integers up to 10^8
 ? c = 0; for(d = 1, 10^8, if (issquarefree(d), c++)); c
 time = 3min, 2,590 ms.
 %2 = 60792694
 ? c = 0; forfactored(d = 1, 10^8, if (issquarefree(d), c++)); c
 time = 45,348 ms. \\ faster !
 %3 = 60792694
 @eprog
