Kurt Foster on Thu, 13 Feb 2025 18:19:52 +0100


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

Re: How to find a solution to this equation so the result is a perfect square ?


On Feb 13, 2025, at 8:05 AM, Laël Cellier wrote:

So, do you mean only square roots of a are the solution ? In the current example, I volontarily took a long a in the case it’s hard to factorize (up to 1024). On the other end, I don’t need a specific end result, but just for it to be a square…

And even then, what about the case I know a square root of 20422354090808007360481140437163150058277495681745577657420405131241 mod 53919893334301279589334030174040979997534463873026188556492192357233 (taking back the example) ?

Taking Denis Simon's formulation

y^2 - N*z^2 == 0 (mod a)

with

N = 20422354090808007360481140437163150058277495681745577657420405131241 and

a = 53919893334301279589334030174040979997534463873026188556492192357233

I first check that N and a are relatively prime:

? gcd (20422354090808007360481140437163150058277495681745577657420405131241,53919893334301279589334030174040979997534463873026188556492192357233 )
%1 = 1

Assuming further that gcd(z, a) ==1 we have

(y/z)^2 == N (mod a).

I note that assuming that y and a are also relatively prime, there is no solution unless N is a quadratic residue modulo every prime factor of a. OK, factoring "a" we have

? factor (53919893334301279589334030174040979997534463873026188556492192357233)

%2 =
[5192296858534827628530496329220121 1]

[10384593717069655257060992658440473 1]

Pretending we don't know from the example that N is in fact a quadratic residue modulo each prime factor, and checking,

? p1=%2[1,1];p2= %2 [2,1 ];N =20422354090808007360481140437163150058277495681745577657420405131241;
? kronecker(N,p1)
%4 = 1
? kronecker(N,p2)
%5 = 1

OK, now we extract square roots of N modulo each prime factor, and use CRT to get all possible values of y/z (mod a):

? sqrt(Mod(N,p1))
%6 = Mod(224635834423632839306016528458225, 5192296858534827628530496329220121)
? sqrt(Mod(N,p2))
%7 = Mod(4522202310821969556787916053134856, 10384593717069655257060992658440473)

? chinese(%6,%7)
%8 = Mod (49758565764982590856078871380073331629592230703205690186378482038585 , 53919893334301279589334030174040979997534463873026188556492192357233)
? chinese(%6,-%7)
%9 = Mod (30324503141575450758959658433422525480164049178623057876318164013414 , 53919893334301279589334030174040979997534463873026188556492192357233)
? chinese(-%6,%7)
%10 = Mod (23595390192725828830374371740618454517370414694403130680174028343819 , 53919893334301279589334030174040979997534463873026188556492192357233)
? chinese(-%6,-%7)
%11 = Mod (4161327569318688733255158793967648367942233169820498370113710318648 , 53919893334301279589334030174040979997534463873026188556492192357233)
?

The reader can check that for the given solution, y/z is the last of these square roots, i.e.

21/519229685853482762853049632922093 == 4161327569318688733255158793967648367942233169820498370113710318648 (mod a)

I leave the complications of when the modulus a is not square free, or when gcd(z, a) > 1, etc to others.