Factoring multivariate polynomials

If I have a multivariate polynomial $P[X_1,\dots,X_n]\in \mathbb{R}[X_1,\dots, X_n]$, is there a polynomial time algorithm to factor the polynomial into irreducible polynomials $\in \mathbb{C}[X_1,\dots,X_n]$?

Also, how do the factors look like - are they all linear or constant polynomials or could they also be non-linear?

If the factorization involves non-linear irreducible polynomials, then is it possible to list all the roots of $P[X_1,\dots,X_n]$ in polynomial time?

Edit: To give some motivation for my question, my goal is to find if a polynomial is $\geq 0$ on its entire domain or not.

• Not necessarily linear, example $y-x^k$. – André Nicolas Oct 14 '11 at 21:42
• How do you propose to list all the roots of a polynomial in any amount of time, if the polynomial has uncountably many of them? (I take it by "roots" you mean $n$-tuples of complex numbers that make the polynomial zero; if you mean something else, then, what?) – Gerry Myerson Oct 14 '11 at 21:55
• I thought that every polynomial had a finite number of roots... – user17663 Oct 14 '11 at 21:57
• @Opt: only in one dimension. The zero set of a polynomial in more than one variable is a space rather than a finite set of points, e.g. $p(x, y) = x^2 + y^2 - 1$ has zero set the unit circle. – Qiaochu Yuan Oct 14 '11 at 22:09
• For the edited question, there are many algorithms, but probably none that involve factoring. – André Nicolas Oct 14 '11 at 23:08