| hermann on Thu, 27 Nov 2025 13:15:24 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: gaussian integer modulus / Pollard's rho method on gaussian integers |
On 2025-11-27 11:05, Bill Allombert wrote:
I know there is no Gaussian Integer type in GP.But could a meaningfully renamed "gimod()" function for "Gaussian integermod" be made part of GP?This requires to fix a convention for the Euclidean division for Gaussian integer, and of course not all t_COMPLEX are Gaussian integers.
OK.
Interesting — I used new gimod2() that reports divisor (like nfdiveuc, extended help only knows nfeltdiveuc) as well as modulus for bigger example:Note that GP has aleeady a function nfdiveuc to do that with a different interface.
gimod2(w,z)={
my(u=w*conj(z),n=norml2(z));
d=((u-gismod(u,n))/n);
[d,w-z*d]
};
? a=190+190*I;
? b=19+4*I;
? gimod2(a,b)
[12 + 8*I, -6 - 10*I]
?
Now with nfinit I get same disvisor:
? C=nfinit(y^2+1);
? a=190+190*y;
? b=19+4*y;
? nfeltdiveuc(C,a,b)
[12, 8]~
?
But how to get the modulus from that like in gimod2?
? a-(12+8*y)*b
-32*y^2 - 10*y - 38
?
Another question, gimod() and gimod2() guarantee all operations being
t_INT. But C looks to have some reals inside:
? C[y^2 + 1, [0, 1], -4, 1, [Mat([1, 0.E-57 + 1.0000000000000000000000000000000000000*I]), [1, 1.0000000000000000000000000000000000000; 1, -1.0000000000000000000000000000000000000], [16, 16; 16, -16], [2, 0; 0, -2], [2, 0; 0, 2], [1, 0; 0, -1], [1, [0, -1; 1, 0]], [2]], [0.E-57 + 1.0000000000000000000000000000000000000*I], [1, y], [1, 0; 0, 1], [1, 0, 0, -1; 0, 1, 1, 0]]
?Is nfeltdiveuc() with C guaranteed to return correct result for big normnl2() Gaussian integers?
Regards, Hermann.