Bill Allombert on Fri, 21 Oct 2011 01:11:14 +0200 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
Re: issquare() for t_INTMOD's |
On Fri, Oct 21, 2011 at 02:52:57AM +0400, Max Alekseyev wrote: > On Fri, Oct 21, 2011 at 12:59 AM, Bill Allombert > <Bill.Allombert@math.u-bordeaux1.fr> wrote: > > On Thu, Oct 20, 2011 at 11:56:53PM +0400, Max Alekseyev wrote: > >> Why issquare() is so much slower than kronecker()? > >> > >> ? p = nextprime(10^10) > >> %1 = 10000000019 > >> ? for(i=1,10^6, issquare( Mod(random(p),p) ) ) > >> ? ## > >> *** last result computed in 19,690 ms. > >> ? for(i=1,10^6, kronecker(random(p),p) ) > >> ? ## > >> *** last result computed in 521 ms. > > > > issquare need to check whether p is prime, but not kronecker. > > So you should compare against > > for(i=1,10^6, isprime(p) && kronecker(random(p),p)) > > ? for(i=1,10^6, isprime(p); kronecker(random(p),p) ) > ? ## > *** last result computed in 2,893 ms. > > This is still much better than issquare(). > Why? because issquare is actually doing factor(p), which for some reason is much slower than isprime(p). Cheers, Bill.