| Bill Allombert on Fri, 29 Apr 2022 21:29:01 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: slow factor |
On Sat, Apr 30, 2022 at 02:12:33AM +0800, Zhao Li wrote:
> Hi all,
>
> We are using GP for factoring the multivariate polynomial, which
> however could be extremely slow compared to Factor function in
> mathematica.
Yes, this is very slow. In fact, this is not even really documented!
> So we were wondering if there is any option to make factor more efficient in GP.
Probably not... Over what ring do you want to factor ?
Your example is in Z[i][X,Y] (with i^2=-1).
PARI do not have fast GCD code for such ring, so issquarefree(P) is very slow.
You can try the following script which skip the issquarefree step:
fact(P) =
{
my(x=variable(P),y=variable(Vec(P)));
my(d=poldegree(P,y));
my(C=content(P),FC=factor(C));
for(i=1,oo,
my(R=substpol(factor(subst(P/C,ieta,(x+i)^d)),(x+i)^d,ieta));
R= matconcat([FC,R]~);
my(F=factorback(R)*C);
if(pollead(P)*F==pollead(F)*P,
return(R)));
}
? fact(P)
? ##
*** last result computed in 8,564 ms.
(which is slow but still usable).
Cheers,
Bill