Karim Belabas on Tue, 03 Jan 2006 19:03:44 +0100


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Re: Issquare function


* Tautócrona [2006-01-03 18:36]:
> Hi:
> 
> I want to know how is implemented the issquare( ) function for Pari-GP when the
> argument is a natural number.
> 
> I think the program checks several quadratic residue conditions to see if the number is a
> quadratic non-residue, and if all the conditions are true, then compute I = intsqrt (n) 
> and check if I^2 = n. Is
> this correct?

Yes.

> If it is, how many conditions and in which Z_n's are they done? Why these and not others?

See src/basemath/arith1.c:carremod()

We check modulo N = 64 * 63 * 65 * 11 = 2882880 [ cost ~ 1 long division,
3 small divisions and <= 4 table lookups ]. The proportion of squares in each
of the residue rings is

  12/64 < 16/63 < 21/65 < 6/11, 

for a total of 6 / 715 < 1/100 quadratic residues in Z/NZ. Computing mod p^k
instead of mod p for p > 3 would make tables larger for a negligible
improvement. Adding extra primes p >= 17 would add one table every
2 primes, and eliminate roughly 3/4 of surviving non-squares.

But this would quickly involve extra long divisions, whereas on average we
already expect less than 1 / 100 of our square roots to yield a
non-square...

    Karim.
-- 
Karim Belabas                  Tel: (+33) (0)5 40 00 26 17
Universite Bordeaux 1          Fax: (+33) (0)5 40 00 69 50
351, cours de la Liberation    http://www.math.u-bordeaux.fr/~belabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux.fr/  [PARI/GP]