Bill Allombert on Fri, 06 Feb 2015 00:15:33 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: fordiv question |
On Thu, Feb 05, 2015 at 09:46:06PM +0100, Karim Belabas wrote: > With the correct expression: > ? forvec(X=[[0,240],[0,50],[0,20],[0,15]], x=2^X[1]*3^X[2]*5^X[3]*7^X[4]) > time = 2,653 ms. > > Better (and faster): > ? P = [2,3,5,7]; > ? forvec(X=[[0,240],[0,50],[0,20],[0,15]], x=factorback(P,X)) > time = 1,821 ms. Actually you can do better in theory by using a cache, but this remove much of the simplicity of forvec and it is probably slower in GP: { P=[2,3,5,7]; pr=[1,1,1,1]; my(s); forvec(X=[[0,240],[0,50],[0,20],[0,15]], my(j=#X); while(j > 0 && X[j]==0,j--); if (j==0,x=1, pr[j]*=P[j]; for(k=j+1,#X,pr[k]=pr[j]); x=pr[j]); s++); s } %1 = 4129776 ? ## *** last result computed in 4,212 ms. Cheers, Bill