Bill Allombert on Sat, 12 Oct 2024 18:42:45 +0200


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

Re: computing all square root modulo a composite


On Sat, Oct 12, 2024 at 05:52:09PM +0200, Karim Belabas wrote:
> * Karim Belabas [2024-10-12 17:41]:
> > * Max Alekseyev [2024-10-12 16:50]:
> > > On Tue, Oct 1, 2024 at 4:56 AM Bill Allombert <
> > > Bill.Allombert@math.u-bordeaux.fr> wrote:
> > > 
> > > >
> > > > Internally, we have a function Zn_quad_roots that compute all the solution
> > > > of x^2+b*x+c mod N
> > > > for composite N.
> > > > Maybe we could add it to GP if we find a GP interface to it.
> > > >
> > > >
> > > Bill, I'd truly appreciate having such a function.
> > 
> > You have it already:
> > 
> >   install(Zn_quad_roots, GGG)
> >   Zn_quad_roots([N, factor(N)], 0, -B)
> > 
> > should output all square roots of B mod N. (Didn't test :-)
> > Of course, [N, factor(N)] should be precomputed.
> 
> Should have tested: this function returns NULL when -B is not a
> quadratic residue mod N, which will crash gp. So one needs a 2 lines
> wrapper to cater for this case.

Well, one can alway use isNULL :) it never get old!

? install(Zn_quad_roots, GGG)
? isNULL(x=[])=x;
? f(N,B)=isNULL(Zn_quad_roots([N, factor(N)], 0, -B))
%3 = (N,B)->isNULL(Zn_quad_roots([N,factor(N)],0,-B))
? f(92,7)
%4 = []
? f(92,11)
%5 = []
? f(92,12)
%6 = [46,[14,32]]

Cheers,
Bill.