Karim Belabas on Mon, 06 Aug 2012 17:11:34 +0200


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

Re: How to factor integer over Z[i]?


* Andrew Lelechenko [2012-08-06 16:40]:
> I can factor an integer over the ring of integers and I can factor a
> Gaussian integer over the ring of Gaussian integers:
> 
> ? factor(25)
> %5 =
> [5 2]
> ? factor(5+I)
> time = 0 ms.
> %2 =
> [     -I 1]
> [  1 + I 1]
> [2 + 3*I 1]
> 
> But how should I ask PARI/GP to factor an integer over Gaussian
> integers? I tried for example factor(5+0*I), but it doesn't work well.

Here's a simple possibility:

\\ assume n is a t_INT
Zi_Z_factor(n) = my (f = factor(n*I)); f[1,1] /= I; f;

(17:02) gp > Zi_Z_factor(5)
%1 = 
[1 - 2*I 1]

[1 + 2*I 1]

This is not a very flexible hack. You can factor elements over arbitrary
(principal) number fields as follows:

  ? K = bnfinit(y^2 + 1)   \\ here, Q(i) ~ Q[y]/(y^2+1)
  ? F = idealfactor(K, 5);
  ? F[,1] = apply(x->nfbasistoalg(K,bnfisprincipal(K,x)[2]), F[,1]);
  ? F
  %4 = 
  [ Mod(y - 2, y^2 + 1) 1]

  [Mod(-y - 2, y^2 + 1) 1]

(Some version of this will also work over non-principal fields, but you
have to test all possible products of the prime ideal factors for
principal ideals, and you no longer have uniqueness, of course.)

Cheers,

    K.B.
--
Karim Belabas, IMB (UMR 5251)  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-bordeaux1.fr/~belabas/
F-33405 Talence (France)       http://pari.math.u-bordeaux1.fr/  [PARI/GP]
`