Karim Belabas on Sun, 12 Jan 2025 11:58:07 +0100


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

Re: What’s the equivalent of Mathematica’s Solve[] Function in Pari/Gp ?


Hi Laël,

  Bill's question was about the algorithm used, not the result.

To solve a*x + b*y = c in {x,y} integers (given a,b,c integers) in GP:

Solve(a,b,c) =
{ my([u, v, d] = gcdext(a, b));

  if (c % d, return ([]));  \\ no solution
  my(x = c/d * u % (b/d));
  [x, (c - a*x) / b];
}

? Solve(300001,4139891237,5)
%1 = [1952821586, -141513]
? 1952821586 * 300001 - 141513*4139891237
%2 = 5

Cheers,

    K.B.
-- 
Pr. Karim Belabas, U. Bordeaux, Vice-président en charge du Numérique
Institut de Mathématiques de Bordeaux UMR 5251 - (+33) 05 40 00 29 77
http://www.math.u-bordeaux.fr/~kbelabas/

* Laël Cellier [2025-01-12 11:46]:
> No,
> 
> it stops after finding the first solution instead of returning every
> possible values and that’s what I’m needing. And even if gcdext was the
> solution, how would I be able to use it since the equation contains a ==
> sign ?
> 
> Cordialement,
> 
> Le 12/01/2025 à 00:01, Bill Allombert a écrit :
> > On Sat, Jan 11, 2025 at 10:59:38PM +0100, Laël Cellier wrote:
> > > Bonjour,
> > > 
> > > simple question, in mathematica, I can write something like this :
> > > Solve[((25)^2 + x RSA260)/(y) == (Floor[RSA260^(1/2)] + 1)^2, {x, y},
> > > Integers]
> > > where RSA260 is variable, and it returns me a value of x and y for which the
> > > equation is true.
> > Does it just try every couple (x,y) ?
> > You can solve that in GP using gcdext.
> > 
> > Cheers,
> > Bill.